我昨天工作了大约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);
}
答案 0 :(得分:6)
您的get_number
函数始终返回0,因为您从未向value
变量分配任何内容。我猜你想要:
value = value*10 + (c - '0');
而不是
c = value;
澄清:
您正在逐位读取数字(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'
由ASCII代码表示,例如x
。 '1'
代表x + 1
等。如果您要打印'0'+'3'
的值,则不会像您期望的那样3
。这就是我们从字符中减去'0'
(x
)的原因,以获得实际数字。
希望清除一些事情。
答案 1 :(得分:1)
给定与数字对应的字符,您需要获取数字本身。例如,您希望获得数字0,而不是数字48(字符“0”的ASCII代码)。如果您的字符是ASCII,这就是一个技巧,这涉及到数字从'0'顺序开始的事实,以及您可以相互“减去”字符的事实。
您需要使用已输入的数字来建立数字。如果您有一个可以将数字移动到10s列,从10s列到100s列的操作,将会有所帮助,依此类推。你能想到那次行动是什么吗?