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