【发布时间】:2016-04-23 16:38:36
【问题描述】:
当 while 循环在第一次之后运行时,它会在从标准输入获取用户输入之前两次打印我的“创建新节点”提示。为什么是这样?查看链接图片。
代码:
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);
}
}
}
终端输出:
【问题讨论】:
-
您应该将文本作为文本而不是图像发布!
-
在调用
fgets()时应始终检查 (!=NULL) 返回值以确保操作成功。 -
数组:
userInput只有两个字符长。因此,使用fgets()一次只能从标准输入中使用一个字符。这意味着如果用户输入:n<cr>,n将被消耗,然后在下一个循环中,<cr>将被消耗,代码将再次循环以获取用户的下一个实际输入。建议将userInput[]加长几个字符,比如加长2 或3 个字符。 -
使用户能够输入
Y或N在调用fgets()之后和第一个if()之前插入对tolower()的调用注意:tolower()的原型是 -
续。 tolower() 函数将要处理(并返回)
int而不是char,因此建议使用此行输入来自用户的值:while( (userInput = getchar()) == EOF || '\n' == userInput );并将“userInput”声明为:int userInput;
标签: c while-loop stdin fgets