为什么 getchar 不停止获取输入?

Why doesn't getchar stop to get input?

我有以下一段代码,它应该与用户交互,了解他想做什么。

int input;
printf("Would you like to update the name of the student?\n");
printf("Enter Y(yes) or N(no)\n");
input = getchar();

if (input == 'Y' || input == 'y') {
  printf("Please enter the updated name\n");
  scanf("%s", tmpSt->name);
}

printf("Would you like to update the student's ID?\n");
printf("Enter Y(yes) or N(no)\n");
input = getchar();

但是执行的时候并不会停下来获取第一个输入。

Would you like to update the name of the student?
Enter Y(yes) or N(no)
Would you like to update the student's ID?
Enter Y(yes) or N(no)

它应该得到名称的答案,但它直接转到了 id。

scanf("%s", ...) 将用户输入的换行符保留在输入流中。

而不是getchar(),使用char c; scanf(" %c", &c);初始space将使scanf()忽略挂起的白色space,包括挂起的换行符。

同时检查 scanf() 的 return 值以检测无效输入和文件结尾。