c - 为什么我的程序陷入无限循环?

标签 c string while-loop scanf infinite-loop

我想扫描一行,直到按下换行符。我知道 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/

相关文章:

ruby - 字符串破坏性方法似乎不适用于字符串切片

java - 从一串数字中获取一个 int 数组

python - 检查字符串是否以列表中的一个字符串结尾

c++ if(cin>>input) 在 while 循环中不能正常工作

c - 在 C 中存储来自字符串的两个整数

c - 什么比长双倍更大?

调用绑定(bind)函数

c - 在我的主函数中从命令行传递参数并使用 execvp

Excel VBA - 仅在 with 语句之后结束的 while 语句

Linux bash 定时器