使用fgets读取学生姓名时首字符丢失的问题排查求助
fgets读取学生姓名时首字符丢失的问题排查求助
大家好,我最近写了一个用来录入学生信息的C程序,但是遇到了一个奇怪的问题:第一个学生的姓名首字符总是会丢失,后面的学生信息录入都正常。
具体场景是:当我输入学生数量后,开始录入第一个学生的姓名,比如我输入"Tom",程序最终存储的却是"om"。我试过把fgets换成gets,还额外加了getchar来处理输入流的换行,但问题依然存在,实在找不到原因了,麻烦各位帮忙看看我的代码哪里出问题了?
我的代码如下:
int main() { // Task1 - Enter student number int i, number; printf("Enter the number of students: "); scanf("%d", &number); getchar(); while (number > 1000) { printf("Your number is too high. Maximum number of student is 1000. Please enter again: "); scanf("%d", &number); } //Task2 - get student info struct studentInfo students[number]; for (i = 0; i < number; i++) { printf("\nEnter data for student %d:\n", i + 1); printf("Enter student %d name: ", i + 1); getchar(); // consume the newline character left in the input stream fgets(students[i].fullName, sizeof(students[i].fullName), stdin); //use fgets instead of scanf students[i].fullName[strcspn(students[i].fullName, "\n")] = 0; // Remove trailing newline printf("Enter student %d ID: ", i + 1); scanf("%s", students[i].ID); printf("Enter student %d birthdate: ", i + 1); scanf("%s", students[i].birthDate); } }
我尝试过的修改:把fgets替换成gets,并且保留了getchar(),但首字符丢失的问题还是没有解决。
备注:内容来源于stack exchange,提问作者Dat Tran
相关产品推荐
相关产品推荐

