平均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); } 

计划的问题是:

  1. getchar()返回一个ASCII码,条件错误。 检查边界时,使用((c<'0') || (c>'9'))
  2. 对于exit函数,您需要包含“stdlib.h”。
  3. 要了解什么是get_numbermain函数,您需要将函数移动到main函数之前,或者您可以使用forward声明。
  4. 赋值运算符( = )的优先级低于不等式运算符( != ),因此需要使用括号,如: ((c = getchar()) != '\n')

您实际上已经创建了几个问题,因此我不会依赖您的代码。

在任何情况下,一般情况下 – 建议您学习如何使用调试器。 一旦您的代码编译(为此您需要习惯于编译错误消息),您需要开始调试代码。 我建议您花点时间学习如何设置断点,设置监视,并逐步进入代码。 对于优秀的开发人员来说,这项技能绝对必要

这是我如何纠正代码……

  1. http://ideone.com/a0UMm – 编译错误
  2. http://ideone.com/ljUg1 – 警告,但它现在有效
  3. http://ideone.com/Qd0gp – 没有错误,没有警告,测试运行正常

对于1.我使用了您发布的“原始代码”。

对于2.我使用了int main(void) ,在定义main之前声明了函数get_number ,在第20行中添加了括号,并添加了#include

对于3.我添加了return 0;main的最后}之前。 我还删除了混淆了ideone界面的额外输出(它在交互式界面上看起来更好)


编辑完成纠正原始代码任务所需的更多测试