【发布时间】:2021-06-14 14:59:09
【问题描述】:
gradeOne 和 secondGrade 不保存我给出的数字。所以我不能得到平均值,因为总是以 (0 + 0)/2 的除法结束,有人可以帮我吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int students;
char name[50];
double gradeOne, secondGrade, classAverage = 0, average = 0;
for(students = 1;students <= 15; students++){
printf("Tell me Your name: \n");
fflush(stdin);
scanf("%[^\n]s", &name);
//saves name
printf("Tell me your first grade: \n");
scanf("%f", &gradeOne);
printf("Tell me your second grade: \n");
scanf("%f", &secondGrade);
//saves grade
printf("\n========================================\n");
printf("Student: %s\n", name);
printf("First Grade: %3.2f \nSecond Grade: %3.2f \n", gradeOne, secondGrade);
printf("%f", average);
printf("\n========================================\n");
average = (gradeOne + secondGrade)/2;
//creates average
printf("Average of the %d student: %3.2f",students, average);
classAverage += average;
//creates class average
}
classAverage = classAverage / (students - 1);
printf("The class average was: %3.2f", classAverage);
return 0;
}
【问题讨论】:
-
fflush(stdin);的行为未定义。一旦您的程序表现出未定义的行为,就没有进一步分析的意义。 -
scanf("%[^\n]s", &name)不正确。几乎可以肯定您打算使用"%[^\n]"。使用尾随s,如果输入的下一行以s开头,它将被匹配并被此消耗。 -
我建议
" %[^\n]",应该是name,而不是&name -
使用
scanf(" %49[^\n]", name),否则还不如使用邪恶的gets()。 -
@WilliamPursell “如果输入的下一行以 s 开头,则在尾随 s”是不对的。
"%[^\n]"消耗任何's'的输入。"%[^\n]s"中的"s"是多余的。