C/C++如何判断用户输入是否合法?
大家讲道理
大家讲道理 2017-04-17 11:34:21
0
2
529
int a;
scanf("%d",&a);
cin>>a;

ex:我想让用户输入整数,但是如果用户输入的不是我想要的类型如!%$#,abcd....都有什么方法或者函数去判断呢?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
大家讲道理

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,可以先按照字串進行讀取,然後檢查字串合法性,使用一些函式庫函數(如sscanfisdigitatoi等等)將字串轉換為整數。

PHPzhong

我記得大一做過類似的題目,當時都是用正規表示式判斷的。

string str;
cin >> str;
const regex re("\d+");
if(!regex_match(str, re))
  //....
else
  int num = stoi(str);
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!