【发布时间】:2012-10-05 19:32:52
【问题描述】:
我在一个程序中通过 scanf 过滤输入。 我想要只读数字和大写字母 + 空格。
最近我试图做类似的事情,它卡在一个无限循环中,仍然只打印第一个输入。
我知道fgets(),但我知道这行得通。
我找不到问题出在哪里。
这是简化的情况;我怎么了?
#include <stdio.h>
#include <string.h>
int main()
{
char str[21];
do
{
scanf("%20[0-9A-Z ]", str);
printf("%s\n", str);
} while(strcmp("END", str) != 0);
return 0;
}
编辑:我忘了说,输入是有效的,对于输入:“HELLO”程序卡住了……scanf 仅在第一次输入时返回 1,对于其他人返回 0。
而且我也试过fflush(stdin),看完之后……
【问题讨论】:
-
你最好使用
getc(stdin)并检查字符直到它得到20个有效字符。 -
@shiplu.mokadd.im - 是的,我知道这些功能,但我想用 scanf() 来实现它,因为很久以前,我用它做了一些东西..
-
最好先阅读用户输入,然后通过
sscanf()评估其内容