为什么getchar()在printf语句后读取’\ n’?

我提示用户输入数组的长度,使用此输入初始化char []数组,然后提示用户输入要输入char []数组的消息。

我正在使用getchar()读取用户消息的第一个字符。

但是, getchar()在读取任何用户输入之前正在读取换行符'\n' 。 它似乎是从前一个提示用户的printf语句中获得'\n'

这是相关的代码:

 #include  int main(void) { int len = 0, originalLen = 0; printf("\n\nWhat is the length of the array? "); scanf("%d", &originalLen); char str[originalLen]; // intitializing the array printf("Enter a message to enter into the array: "); char target = getchar(); str[len] = target; // why is getchar() reading '\n'? if (target == '\n') { printf("\n...what happened?\n"); } return 0; } // end of main 

输入数字并按ENTER键时,数字和字符放在输入缓冲区中,它们是:

  • 输入的数字和
  • 换行符( \n )。

scanf会消耗该数字,但换行符仍保留在输入缓冲区中,由getchar()读取。

您需要在调用getchar()之前使用\n ,方法是使用:

 scanf("%d ", &originalLen); ^^^ 

这告诉scanf读取数字和一个附加字符,即\n

这是因为之前的scanf在数字后没有读取换行符。

这可以通过两种方式解决:

  1. 使用例如getchar来读取它
  2. scanf格式之后添加一个空格(例如scanf("%d ", ...)

您可以在循环中使用getchar来刷新stdin,然后再读取下一个字符。

 while((target = getchar()) != '\n' && target != EOF)