为什么当我尝试运行此代码时,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. nn");
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;
}
scanf("%f", scoreEntered);

应该是

scanf("%f", &scoreEntered);

scanf期望变量的地址,当你传递变量而不是变量的地址时,它最终会访问无效的内存,导致段错误

您的错误在第 16 行

它应该是

scanf("%f", &scoreEntered);

原因

">

&"用于获取变量的地址,"scanf(("需要变量的地址来存储数据

问题是您传递scanf()的是scoreEntered的值而不是其地址。 你应该写:

scanf("%f", &scoreEntered);

请注意,编译器可以警告您这种愚蠢的错误,您可以提高警告级别。 使用gcc -Wall -Werrorclang -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: %.2fn", numtest, average);
}
return 0;
}

相关内容

  • 没有找到相关文章