平均3个整数
我的任务是修复代码。 我在下面编辑了我的代码,下面是原始代码。 我想我在这里仍然有一些错误。 我的错误检查似乎不起作用,我不确定我的getchar()函数是否已编写或正常工作。
请假设我一无所知,因为这是相当准确的。
代码编译,但答案总是2.我在这段代码大约4个小时后再用3个代码来完成。
我的代码
#include double get_number(double 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(double num) { double value = 0; char c; int i; printf("Please input number %d: ", num); while (c = getchar != '\n') { if ( (c>9) || (c<0) ) { printf("Incorrect character entered as a number - %c\n",c); return(0); } else { value = num; } } return(value); }
原始代码
#include 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; char c; printf("Please input number %d: ", num); while (c = getchar() != '\n') { if ( (c=0) ) { printf("Incorrect character entered as a number - %c\n",c); exit(-1); } else { value = 10*value + c - '0'; } } return(value); }
一些问题:
1.你应该使用’9’和’0’,因为你想要数字’9’(0x39)和’0’(0x30)的ASCII值,而不是0x9和0x0。
if ( (c>'9') || (c<'0') ) {
2.!=的优先级高于=,所以你需要parens。 了解运算符优先级 ,如果您有疑问,请使用parens:
3. getchar
是一个函数,而不是一个变量。
while ((c = getchar()) != '\n') {
4.您使用了错误的转换。 num
是一个double,所以你需要%f
。 或者,您可以将num
int
。
printf("Please input number %f: ", num);
你从来没有以任何方式实际使用过c(错误检查除外)。 你总是返回0或num
(参见你的else子句),这没有任何意义。 原件的其他正文是正确的。
你得到的浮点解析都错了,不应该自己做。 有一种更简单的方法:
double get_number(double num) { double value = 0.0; printf("Please input number %lf: ", num); scanf("%lf", &value); return(value); }
原计划的问题是:
- getchar()返回一个ASCII码,条件错误。 检查边界时,使用
((c<'0') || (c>'9'))
。 - 对于
exit
函数,您需要包含“stdlib.h”。 - 要了解什么是
get_number
的main
函数,您需要将函数移动到main
函数之前,或者您可以使用forward声明。 - 赋值运算符(
=
)的优先级低于不等式运算符(!=
),因此需要使用括号,如:((c = getchar()) != '\n')
您实际上已经创建了几个问题,因此我不会依赖您的代码。
在任何情况下,一般情况下 – 建议您学习如何使用调试器。 一旦您的代码编译(为此您需要习惯于编译错误消息),您需要开始调试代码。 我建议您花点时间学习如何设置断点,设置监视,并逐步进入代码。 对于优秀的开发人员来说,这项技能绝对必要
这是我如何纠正代码……
- http://ideone.com/a0UMm – 编译错误
- http://ideone.com/ljUg1 – 警告,但它现在有效
- http://ideone.com/Qd0gp – 没有错误,没有警告,测试运行正常
对于1.我使用了您发布的“原始代码”。
对于2.我使用了int main(void)
,在定义main
之前声明了函数get_number
,在第20行中添加了括号,并添加了#include
对于3.我添加了return 0;
在main
的最后}
之前。 我还删除了混淆了ideone界面的额外输出(它在交互式界面上看起来更好)
编辑完成纠正原始代码任务所需的更多测试