84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
int a; scanf("%d",&a); cin>>a;
ex:我想让用户输入整数,但是如果用户输入的不是我想要的类型如!%$#,abcd....都有什么方法或者函数去判断呢?
光阴似箭催人老,日月如移越少年。
scanf的回傳值是正常讀取量的數目,所以只要判斷回傳值即可。
scanf
if(scanf("%d", &a) == 1) printf("OK!"); else printf("Failed to read an integer.");
但scanf比較大的一個坑是其遇到無效字元會停止掃描並將無效字元留在緩衝區中,所以會一直偵測到失敗,進入死循環。遇到這種問題,可以使用以下方案解決:
int a; while(1 != scanf("%d", &a)) { fflush(stdin); // 刷新缓冲区 cout << "Invalid input! Please check and input again: "; } cout << "a = " << a << endl; cout << "Test finished!"; return 0;
當然,這也並非一個好的選擇,最好是避免在這種情況下使用scanf,可以先按照字串進行讀取,然後檢查字串合法性,使用一些函式庫函數(如sscanf、isdigit、atoi等等)將字串轉換為整數。
sscanf
isdigit
atoi
我記得大一做過類似的題目,當時都是用正規表示式判斷的。
string str; cin >> str; const regex re("\d+"); if(!regex_match(str, re)) //.... else int num = stoi(str);
scanf
的回傳值是正常讀取量的數目,所以只要判斷回傳值即可。但
scanf
比較大的一個坑是其遇到無效字元會停止掃描並將無效字元留在緩衝區中,所以會一直偵測到失敗,進入死循環。遇到這種問題,可以使用以下方案解決:當然,這也並非一個好的選擇,最好是避免在這種情況下使用
scanf
,可以先按照字串進行讀取,然後檢查字串合法性,使用一些函式庫函數(如sscanf
、isdigit
、atoi
等等)將字串轉換為整數。我記得大一做過類似的題目,當時都是用正規表示式判斷的。