【发布时间】:2017-05-27 10:23:45
【问题描述】:
我正在尝试用 c 编写一个程序,其中我可以通过来自标准输入的用户输入来控制 while 循环的执行。我已经通过 scanf 和 getchar 函数成功地完成了它。现在我正在尝试使用广泛推荐使用的 fgets() 函数而不是 scanf() 函数来复制它。我写了以下代码:
#include<stdio.h>
#include<string.h>
int main()
{
char loop[4]= "yes";
printf("%s\n",loop);
while(strcmp(loop,"yes")==0)
{
printf("Do you want to continue? [yes|no]: ");
fgets(loop,4,stdin);
}
}
在终端的输出中,我得到以下信息:
Do you want to continue? [yes|no]: yes
Do you want to continue? [yes|no]:
我得到提示继续循环,当我输入“否”时,它应该停止,但只要我输入“是”,循环执行一次然后停止。
我想问题在于,一旦我按下回车,fgets() 就会将它存储到循环变量中,这就是 while 循环终止的原因。我在想正确的方向吗?如果是,在这种情况下,我怎样才能摆脱这个额外的字符,即“Enter”。
【问题讨论】:
-
尝试改为读取 五个 个字符。请记住,
fgets也想读取换行符,并且只有四个字符,没有空格。 -
您必须在致电
fgets后转至remove the trailing newline。 -
请注意,通过使用
fgets(loop, 4, stdin);,当输入"yes"时,换行符会留在输入流中,因此下一个输入调用会拾取这个换行符。 -
谢谢大家,尤其是@xing,你的建议很清楚,我理解我得到的奇怪行为。
-
在调用 fgets( ) 之后,你可以用 strchr( ) 搜索 '\n',如果 '\n' 被读取,则意味着输入缓冲区是干净的,否则你可能想要“清理缓冲区”。