0

我正在编写一个 C 程序,该程序应该添加每个数字,直到它达到一个标记值。然后将它们平均在一起。

我不确定问题出在哪里,但我认为 num 可能从未真正改变过。任何帮助表示赞赏。

#include <stdio.h> 

int sentinal = 9999; 
int iterations = 0; 
int total = 0; 
int average; 
int num; 

int main(void){ 
do{ 
printf("Enter a number to add:\n"); 
scanf("%d\n", num); 
total = total + num; 
iterations++; 
}while (num != sentinal); 

average = total/iterations; 
printf("%d\n", average; 
return 0; 
}

运行版本

#include <stdio.h> 

int main(){ 
int sentinel = 9999; 
int iterations = 0; 
int total = 0; 
float average; 
int num; 

while(1){ 
printf("\nEnter a number to add: "); 
scanf("%d", &num);
if (num == sentinel){
    break;
}else{
total = total + num; 
iterations++;} 
} 

average = (float) total/iterations; 
printf("%f\n", average; 
return 0; 
}
4

4 回答 4

2

你的问题是:

scanf("%d\n", num); 

scanf需要变量的内存地址,应该将读取的值放在哪里。这是使用操作符完成的&。您的代码应该是:

scanf("%d\n", &num);
于 2014-09-04T00:47:17.853 回答
1

scanf() 接受一个指向从标准输入解析的值的指针。您传递的是实际值,而不是指向该值的指针。

于 2014-09-04T00:49:09.293 回答
1

Linux 中有许多工具可以找出分段和其他编译器。如果你想真正调试你的代码在哪里弹出分段错误,你可以使用 GDB 和 valgrind。它准确地告诉你你的代码哪里有错误。

于 2014-09-04T01:11:03.003 回答
1
  1. 提供地址,即使用 .&存储值时scanf
  2. 声明averagefloat,计算时average使用average = (float) total / iterations%f打印时使用average
  3. printf打印时检查您的average右括号是否丢失。
于 2014-09-04T01:12:39.823 回答