Code :: Blocks不断崩溃。这是我理解的完美类型代码,现在我很困惑。
#include <stdio.h>
#include <stdlib.h>
int main() {
float grade = 0;
float scoreEntered = 0;
float numtest = 0;
float average = 0;
printf("Press 0 when complete. \n\n");
do {
printf("Test: %.0f Average: %.2f \n", numtest, average);
printf("\nEnter test score ");
scanf("%f", scoreEntered);
grade += scoreEntered;
numtest++;
average = grade / numtest;
} while (scoreEntered != 0);
return 0;
}
答案 0 :(得分:3)
scanf("%f", scoreEntered);
应该是
scanf("%f", &scoreEntered);
scanf
期望变量的地址,当你传递变量而不是变量的地址时,它最终会访问导致段错误的无效内存
答案 1 :(得分:2)
您的错误在第16行
应该是
scanf("%f", &scoreEntered);
<强>原因强>
“&安培;”用于获取变量的地址,“scanf()”需要变量的地址来存储数据
答案 2 :(得分:1)
问题是您传递scanf()
的值scoreEntered
而不是其地址。你应该写:
scanf("%f", &scoreEntered);
请注意,编译器可以警告您这种愚蠢的错误,它会提高警告级别。使用gcc -Wall -Werror
或clang -Weverything -Werror
获取最大帮助。
另请注意,您应该测试scanf()
的返回值。如果在单次转换的情况下它不返回1
,则不会修改目标变量,并且违规输入将保留在输入流中,从而导致相同的行为无限重复。尝试输入A
作为输入并亲自查看(一旦您更正了丢失的&
)。
以下是经过纠正和改进的版本:
#include <stdio.h>
int main(void) {
float grade = 0;
float scoreEntered = 0;
float average = 0;
int numtest = 0;
printf("Press 0 when complete.\n");
for (;;) {
printf("\nEnter test score: ");
if (scanf("%f", &scoreEntered) != 1 || scoreEntered == 0)
break;
grade += scoreEntered;
numtest++;
average = grade / numtest;
printf("Test: %d Average: %.2f\n", numtest, average);
}
return 0;
}