我提示用户输入数组的长度,使用此输入初始化char []数组,然后提示用户键入要输入char []数组的消息。
我正在用getchar()
阅读用户留言的第一个字符。
但是,getchar()
在读取任何用户输入之前正在读取换行符'\n'
。它似乎从之前的'\n'
语句中获取printf
,提示用户...
以下是相关代码:
#include <stdio.h>
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
答案 0 :(得分:4)
这是因为之前的scanf
不在数字后读取换行符。
这可以通过两种方式解决:
getchar
阅读scanf
格式(例如scanf("%d ", ...)
)答案 1 :(得分:3)
您可以在循环中使用getchar
在读取下一个字符之前清除stdin。
while((target = getchar()) != '\n' && target != EOF)
答案 2 :(得分:2)
输入数字并按ENTER键时,数字和字符放在输入缓冲区中,即:
\n
)。 scanf
消耗了这个数字,但换行符仍在输入缓冲区中,由getchar()
读取。
在使用以下方法调用\n
之前,您需要使用getchar()
scanf("%d ", &originalLen);
^^^
这告诉scanf
读取数字和另一个字符\n
。