我有一個程序通過scanf過濾輸入。 我想只讀數字和大寫字母+空格。過濾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;
}
編輯:我忘了提,輸入是有效的,輸入:「你好」節目卡......和scanf
只對第一個輸入返回1,爲他人返回0 我也試過fflush(stdin)
,在閱讀後...
它更好地使用'getc(stdin)'並檢查字符,直到它獲得20個有效字符。 –
@ shiplu.mokadd.im - 是的,我知道這些功能,但我想使它與scanf(),因爲,在很久以前,我做了一些與它.. –
更好地首先閱讀用戶輸入,然後評估其內容通過'sscanf()' – Wolf