当while循环第一次运行后,它会打印我的"创建新节点"在从stdin获取用户输入之前提示两次。为什么是这样?见链接图片。
代码:
int main()
{
char userInput[2];
while(1)
{
printf("\nCreate new node? (y/n)\n");
printf(">>> ");
fgets(userInput, 2, stdin);
if(strcmp(userInput, "y") == 0)
{
printf("Yes\n");
}
else if(strcmp(userInput, "n") == 0)
{
printf("No\n");
exit(0);
}
}
}
终端输出:
答案 0 :(得分:1)
fgets
读取字符串加'\0'
加'\n'
。由于userInput
仅为2
字节,'\n'
将不会被fgets
读取,并且将在输入缓冲区中。在下一次迭代fgets
将会读取前一次'\n'
调用留下的fgets
。
增加缓冲区大小,您将没有问题
char userInput[3];
或者你可以把
int ch;
while((ch = getchar()) != '\n' && ch != EOF);
在fgets
陈述之后。