首頁  >  問答  >  主體

C/C++如何判断用户输入是否合法?

int a;
scanf("%d",&a);
cin>>a;

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

大家讲道理大家讲道理2767 天前534

全部回覆(2)我來回復

  • 大家讲道理

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

    回覆
    0
  • PHPz

    PHPz2017-04-17 11:36:21

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

    string str;
    cin >> str;
    const regex re("\d+");
    if(!regex_match(str, re))
      //....
    else
      int num = stoi(str);
    

    回覆
    0
  • 取消回覆