【发布时间】:2020-01-05 14:38:42
【问题描述】:
我有一个任务,我需要输入学生的所有信息(ID,姓名,年级)作为数据库作为下面的源代码。我这里的源代码对语法完全有效(没有像我的 gcc 那样通知错误),但我无法输入学生的成绩。当我运行我的程序时,它跳过了输入学生成绩的步骤和输入下一个学生ID的步骤。我已将 getchar() 用于保存 \n 字符,但它可能根本不起作用,或者还有其他原因导致此错误。
typedef struct
{
char id[10];
char name[50];
float grade;
char assess;
}student;
student std[50];
do {
printf("How many students you want to add?\n");
scanf("%d", &num);
if(num<0 || num>50)
printf("Your number must be positive or smaller than or equal to 50!\n");
} while(num<0||num>50);
for(i = a; i < num; i++)
{
printf("Student's id No.%d:", i);
fgets(std[i].id, MAX, stdin);
getchar();
printf("Student's name No.%d:", i);
fgets(std[i].name, MAX, stdin);
getchar();
printf("Student's grade No.%d:", i);
do {
scanf("%f", std[i].grade);
if(std[i].grade < 0 || std[i].grade > 10)
printf("Please re-input grade, it must be between 0 and 10\n");
} while(std[i].grade < 0 || std[i].grade > 10);
std[i].assess=assess(std[i].grade);
}
【问题讨论】:
-
fgets还读取行尾字符,并将其放入您的字符串中。 -
很高兴知道
std的确切定义。 -
同样显示的已经不完整的代码,本身看起来不完整:第二个
while看起来是孤立的。干净清晰的缩进会有所帮助。 -
@alk 因为这只是我程序的一小部分,而且我的完整版很长,我认为没有必要,所以我不把它们都放在这里
-
您显示的
for循环内缺少do。即使作为一个片段也没有意义。