int a;
scanf("%d",&a);
cin>>a;
ex:我想让用户输入整数,但是如果用户输入的不是我想要的类型如!%$#,abcd....都有什么方法或者函数去判断呢?
大家讲道理2017-04-17 11:36:21
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
等等)將字串轉換為整數。
PHPz2017-04-17 11:36:21
我記得大一做過類似的題目,當時都是用正規表示式判斷的。
string str;
cin >> str;
const regex re("\d+");
if(!regex_match(str, re))
//....
else
int num = stoi(str);