c赋值,平均整数

pis*_*ire -1 c

我昨天工作了大约5个小时,并使用此站点的帮助获得了代码,但我认为我这样做的方式是骗子,我使用了scanf命令.无论如何,我想以正确的方式解决这个问题.多谢你们!哦,代码编译但是吐出的平均值是错误的.我想在概念上理解我做错了什么以及完成作业.

#include <stdio.h> 
#include <stdlib.h>
double get_number(int num);


main () {
  double n1,n2,n3;
  double average;

  printf("\nCompute the average of 3 integers\n");
  printf("--------------------------------\n");
  n1 = get_number(1);
  n2 = get_number(2);
  n3 = get_number(3);
  average = (n1 + n2 + n3)/3;
  printf("The average is %0.2f\n",average);
}

double get_number(int num) { 
  double value = 0;
  int c;
  printf("Please input number %i: ", num);
  while ((c = getchar()) != '\n') { 
    if ( (c<'0') || (c>'9') ) { 
      printf("Incorrect character entered as a number - %i\n",c);
      exit(-1);
    }
    else {
      c =value;
    }
  }
  return(value);
}
Run Code Online (Sandbox Code Playgroud)

IVl*_*lad 6

您的get_number函数始终返回0,因为您从不为value变量赋值.我猜你想要:

value = value*10 + (c - '0');
Run Code Online (Sandbox Code Playgroud)

代替

c = value;
Run Code Online (Sandbox Code Playgroud)

澄清:

您正在逐位getchar读取一个数字(您阅读一个字符).所以,让我们说你读数字1 2 3:

当你阅读时1,你会有value = value*10 + ('1' - '0')意义value = 0 + 1 = 1.

当你阅读时2,你也会这样做并获得value = 1*10 + ('2' - '0')意义value = 12.

同样的3.

您需要了解的是,将某些内容乘以10会在该内容的末尾添加0.将数字添加到以零结尾的内容将该数字替换为0.

您还必须了解您正在处理的字符实际上是整数.该字符'0'由ASCII代码表示x.'1'由代表x + 1等,如果你要打印的价值'0'+'3'它不会3如你所期望.这就是我们从字符中减去'0'(即x)得到实际数字的原因.

希望清除一些东西.