我提示用户输入数组的长度,使用此输入初始化char[]数组,然后提示用户键入一条消息以输入到char[]数组中。
我正在用getchar()
读取用户消息的第一个字符。
然而,getchar()
在读取任何用户输入之前正在读取新行转义'n'
。它似乎是从上一个提示用户的printf
语句中获得'n'
。。。
以下是相关代码:
#include <stdio.h>
int main(void) {
int len = 0,
originalLen = 0;
printf("nnWhat 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
这是因为前一个scanf
不会读取数字后面的换行符。
这可以通过两种方式解决:
- 使用例如
getchar
读取 - 在
scanf
格式(例如scanf("%d ", ...)
)后添加空格
您可以在循环中使用getchar
在读取下一个字符之前清除stdin。
while((target = getchar()) != 'n' && target != EOF)
当您输入数字并按下enter键时,一个数字和一个字符将被放置在输入缓冲区中,它们分别是:
- 输入的数字和
- 换行符(
n
)
该数字被scanf
消耗,但换行符保留在输入缓冲器中,由getchar()
读取。
在使用调用getchar()
之前,您需要消耗n
scanf("%d ", &originalLen);
^^^
此命令告诉scanf
读取数字和一个附加字符,即n
。