【发布时间】:2016-08-16 18:44:20
【问题描述】:
除了scanf() 只读取第一个值,我无法真正解释它,然后根据它进行计算。
int main() {
int i, students = 0;
char name[20];
int tests;
float test_score;
int test_sum = 0;
char letter_grade;
double test_average;
printf("Number of students: ");
scanf("%d", &students);
for (i = 0; i < students; i++) {
printf("\nStudent name %d: ", i + 1);
scanf(" %s", &name);
fflush(stdin);
printf("Number of test(s) for %s: ", name);
scanf("%d", &tests);
fflush(stdin);
printf("Enter %d test score(s) for %s: ", tests, name);
if (i < students) {
scanf("%f", &test_score);
test_sum += test_score;
test_average = test_sum / (float)tests;
}
printf("Average test score: %.2f", test_average);
fflush(stdin);
}
return 0;
}
假设我输入 2 个学生,第一个学生有 2 个考试成绩,然后输入 45 87。我应该得到 66.00,但我得到了 22.50。对于第二个学生,我输入 100 55 87 的 3 个测试分数,我得到 48.33。哇哦。
我知道我做错了什么,但我想不通,因为我之前有它工作过,但循环不会继续到第二个学生。
【问题讨论】:
-
你知道
fflush(stdin)是做什么的吗? -
if (i < students) {--> for(int j = 0; j test_sum)。 -
@EOF 清除缓冲区。当我不包含它时,我的程序就结束了。我确实看到它有多么多余,但我不知道为什么我的代码没有它们就无法忍受。
-
@BLUEPIXY 试过了,但我得到了缺少 } 和 ) 之类的错误,这真的很奇怪。
-
@DSmith:在标准、可移植的 C 语言中,
fflush(stdin)是未定义的行为。 POSIX 和 windows 为它定义了行为,但我不知道它在任何情况下都有用。