我想扫描一行,直到按下换行符。我知道 gets()
函数,但我想通过 scanf()
来学习它。问题是,我的程序陷入了无限循环,它扫描用户的输入,然后无限打印出来,每次扫描后应该打印一次。谁能解释一下为什么会这样?
#include<stdio.h>
int main()
{
char str[100];
while(str[0]!='\0')
{
scanf("%[^\n]",str);
printf("%s\n",str);
}
}
最佳答案
如果您坚持使用 scanf,请更改格式说明符:
" %[^\n]"
前面的空格将跳过任何先前的“悬空”\n
此外,您应该在检查 str 数组的内容之前对其进行初始化,最好使用 do-while-loop
代替。
这样的东西应该有效
char str[100] = {0};
do
{
scanf(" %[^\n]",str);
printf("%s\n",str);
}
while(str[0]!='q');
我个人更喜欢将 fgets(...)
与 sscanf(...)
结合使用
检查 scanf 的返回值也是一个好习惯,有一个返回值是有目的的。
添加了另一个 while 条件,循环直到“q”或“quit”
关于c - 为什么我的程序陷入无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41044745/