为什么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
在数字后没有读取换行符。
这可以通过两种方式解决:
- 使用例如
getchar
来读取它 - 在
scanf
格式之后添加一个空格(例如scanf("%d ", ...)
)
您可以在循环中使用getchar
来刷新stdin,然后再读取下一个字符。
while((target = getchar()) != '\n' && target != EOF)