为什么在用户输入第一个命令后,我会将此消息打印两次?

时间:2013-12-05 07:51:03

标签: c printf

我已经编写了所有代码,一切正确,但出于某种原因,输入第一个命令后输入命令或输入'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 image description here

正如您所看到的,唯一一次消息“Enter ...”未打印两次是在启动时,为什么会发生这种情况?提前谢谢所有回答的人!

2 个答案:

答案 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()