我正在编写一个C程序,它应该添加每个数字,直到它达到一个标记值。然后将它们全部平均化。
我不确定问题出在哪里,但我认为这可能是数字从未实际发生变化。任何帮助表示赞赏。
#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;
}
答案 0 :(得分:2)
你的问题在于:
scanf("%d\n", num);
scanf
需要变量的内存地址,其中应该放置读取的值。这是使用运算符&
完成的。你的代码应该是:
scanf("%d\n", &num);
答案 1 :(得分:1)
scanf()获取指向从标准输入解析的值的指针。您传递的是实际值,而不是指向值的指针。
答案 2 :(得分:1)
Linux中有许多工具可以找到分段和其他编译器。如果你想真正调试你的代码弹出分段错误的位置,你可以使用GDB和valgrind。它会准确地给你代码中的错误。
答案 3 :(得分:1)
&
存储值时提供地址,即scanf
。average
声明为float
,并在计算average
时使用average = (float) total / iterations
并在打印%f
时使用average
。printf
时检查average
,缺少右括号。