我有以下代码
while ( a != 5)
scanf("%s", buffer);
这很好但在所提到的单词之间没有空格,换句话说,如果我们使用空格来扫描则scanf终止
如果我使用这个
while( a != 5)
scanf("%[^\n]", buffer);
它仅适用于一次不好的
我从不使用gets()
,因为我知道它有多讨厌......
我的最后一个选择是
while( a != 5)
fgets(buffer, sizeof(buffer), stdin);
所以我的问题是
答案 0 :(得分:1)
为什么第二个命令在循环中不起作用
因为你第一次扫描直到\n
,\n
仍留在输入缓冲区中。您需要从缓冲区吃掉(或者换句话说,丢弃)存储的换行符。您可以使用while (getchar()!=
\ n );
来完成这项工作。
嗯,你快到了。您需要使用我需要用空格扫描字符串的其他选项是什么?
fgets()
。使用它,你可以
gets()
的限制)%s
的限制)但是,请记住,fgets()
读取并存储尾随换行符,因此您可能想要删除它,并且您必须自己手动执行此操作。
答案 1 :(得分:1)
"%[^\n]"
将尝试扫描所有内容,直到换行。输入中的下一个字符是\n
,因此您应该跳过它以转到下一行。
尝试:"%[^\n]%*c"
,%*c
将丢弃下一个字符,即换行字符。