我已经编写了所有代码,一切正确,但出于某种原因,输入第一个命令后输入命令或输入'Q'退出:“输入两次”。
我只需要帮助弄清楚为什么该消息会被打印两次。我和我的导师一起做过这个,我们似乎无法弄清楚为什么在第一次输入/命令后该消息被打印两次。任何帮助他都会非常感激!
这是我的代码:
int main() {
studentType s[MAX_STUDENTS];
teacherType t[MAX_TEACHERS];
char input[MAX_NAME];
int numS, numT;
char command;
FILE * out;
numS = readStudentInfo(s); /* Number of students equals size of array. */
numT = readTeacherInfo(t); /* Number of teachers equals size of array. */
out = fopen("log.out", "w");
while (command != 'Q') {
printf("Enter command or enter 'Q' to quit:\n");
scanf("%c", &command);
if (command == 'S') {
scanf("%s", input);
fprintf(out, "-->%c %s\n", command, input);
getStudentInfo(s, t, input, numS, numT, out);
}
if (command == 'T') {
scanf("%s", input);
fprintf(out, "-->%c %s\n", command, input);
findStudents(s, t, input, numS, numT, out);
}
if (command == 'G') {
scanf("%s", input);
fprintf(out, "-->%c %s\n", command, input);
getGradeList(s, t, atoi(input), numS, numT, out);
}
if (command == 'L') {
scanf("%s", input);
fprintf(out, "-->%c %s\n", command, input);
findGradeTeachers(s, t, atoi(input), numS, numT, out);
}
}
if (command == 'Q') {
fprintf(out, "-->%c\n", command);
fclose(out);
return 0;
}
return 0;
}
这就是我运行程序时得到的结果:
正如您所看到的,唯一一次消息“Enter ...”未打印两次是在启动时,为什么会发生这种情况?提前谢谢所有回答的人!
答案 0 :(得分:1)
在scanf()
的每种字符串格式的开头添加一个空格:
scanf(" %c", &command);
scanf(" %s", input);
在你的代码中,新行被捕获在scanf("%c", &command);
中,你必须通过在scanf的字符串格式的开头添加空格来避免新行的捕获
答案 1 :(得分:0)
scanf("%c",&command);
如果您输入一个字符说'L'并按Enter键进入上面的scanf。只有字符'L'被读入命令变量,而'enter key'仍在stdin中。因此,下次对于scanf,上面的输入键将作为输入提供,并且代码会忽略它。
所以最好在%c
scanf(" %c",&command);
您还可以在scanf google关于fflush();
fflush()