gpt4 book ai didi

c - 在 C 中使用 scanf 进行模式匹配

转载 作者:行者123 更新时间:2023-12-04 05:32:12 25 4
gpt4 key购买 nike

我一直被这个问题困扰。问题的要求很简单。我想要做的就是检查用户输入并允许用户只输入小写字母。另一个限制是我只想使用 scanf() 来完成它。我知道我可以使用 gets() 和其他输入函数,但是为了更好地理解它,我还是想使用 scanf() 来这样做。

我在 GCC 上尝试了以下内容:

char str[100000];
return_value=scanf("%99999[a-z]",str);
if(return_value==0 || return_value==EOF)
{
printf("illegal input");
}
else
printf("input accepted");

以下绝对按预期工作。因此,如果用户尝试以大写字母输入任何字符串,代码只会打印出:“非法输入”。

当我尝试将上述代码放入有限 while 循环时,问题就出现了。例如:
int counter=0; 
char str[100000];
scanf("%2d",&counter);
while(counter>0)
{
fflush(stdin);
return_value=scanf("%99999[a-z]",str); //note
if(return_value==0 || return_value==EOF)
{
printf("illegal input");
}
else
printf("input accepted");
counter--;
}//end of while

在上述情况下,只要用户输入变量“counter”的值并按下返回键,控件就会立即运行并打印“非法输入”,甚至无需等待用户输入字符串。

为了更正此错误,我尝试将以下内容代替标记为注释的行:
return_value=scanf("%99999s[a-z]",str); //note

甚至这个:
return_value=scanf("%99999c[a-z]",str); //note

在任何一种情况下,尽管用户在输入 'counter' 变量的值后被允许输入输入字符串,但不会对用户输入进行清理,即即使用户输入由大写字符组成的字符串,输出也不是“非法输入” "(应该是这样),而是“接受输入”。

现在有人可以向我解释一下。我哪里出错了,还是我只是忽略了一些东西并犯了一些愚蠢的错误?

最佳答案

fflush()是一种不恰当的清除方式 stdin .相反,使用 scanf读到 EOF或者只是

while((c = getchar()) != '\n' && c != EOF) { /* Discard */ }

此外,我建议甚至对诸如 else 之类的单个语句进行范围界定。

关于c - 在 C 中使用 scanf 进行模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12446539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com