【发布时间】:2023-03-22 22:16:01
【问题描述】:
我想扫描一行,直到按下换行符。我知道gets() 功能,但我想通过scanf() 学习它。问题是,我的程序陷入了一个无限循环,它扫描用户的输入,然后无限打印出来,每次扫描后它应该打印一次。谁能解释它为什么会这样?
#include<stdio.h>
int main()
{
char str[100];
while(str[0]!='\0')
{
scanf("%[^\n]",str);
printf("%s\n",str);
}
}
【问题讨论】:
-
第一次测试
str[0]时,它是未初始化的。scanf返回一个值;使用它。 -
scanf("%[^\n]",str);第一次保持换行符。第二次及之后,被拒绝。第一次也是str[0]!='\0',使用未初始化变量。 -
“我知道 gets() 函数” - 但您知道它已过时且不应使用吗?
-
上次我检查过,
scanf不接受正则表达式。这就是你正在做的事情。 -
啊。我以前从未见过。谢谢指正。
标签: c string while-loop scanf infinite-loop