我昨天工作了大约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)
您的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)得到实际数字的原因.
希望清除一些东西.