簡體   English   中英

正確使用cin.fail()的方法

[英]Correct way to use cin.fail()

使用cin.fail();的正確方法是什么?

我正在制作一個你需要輸入內容的程序。 您是否需要輸入數字或字符並不十分清楚。 當用戶輸入一個字符而不是一個數字時,控制台會發瘋。 我如何使用cin.fail()來解決這個問題?

或者,還有更好的方法?

std::cin.fail()用於測試前面的輸入是否成功。 然而,使用流就好像它是一個布爾值更為慣用:

if ( std::cin ) {
    //  last input succeeded, i.e. !std::cin.fail()
}

if ( !std::cin ) {
    //  last input failed, i.e. std::cin.fail()
}

在輸入語法允許多個字符的上下文中,通常的解決方案是按行(或其他字符串形式)讀取它,並解析它; 當你檢測到有一個數字時,可以使用std::istringstream來轉換它,或者使用任意數量的其他替代方法(如果你有C ++ 11,則使用strtolstd::stoi )。

但是,可以直接從流中提取數據:

bool isNumeric;
std::string stringValue;
double numericValue;
if ( std::cin >> numericValue ) {
    isNumeric = true;
} else {
    isNumeric = false;
    std::cin.clear();
    if ( !(std::cin >> stringValue) ) {
        //  Shouldn't get here.
    }
}

如果最后一個cin命令失敗,則cin.fail()返回true,否則返回false。

一個例子:

int main() {
  int i, j = 0;

  while (1) {
    i++;
    cin >> j;
    if (cin.fail()) return 0;
    cout << "Integer " << i << ": " << j << endl;  
  }
}

現在假設你有一個文本文件--input.txt,它的內容是:

  30 40 50 60 70 -100 Fred 99 88 77 66

如果您將在上面的短程序上運行,它將導致如下:

  Integer 1: 30
  Integer 2: 40
  Integer 3: 50
  Integer 4: 60
  Integer 5: 70
  Integer 6: -100

它在讀取第七個單詞后退出后不會繼續,因為它不是一個整數: cin.fail()返回true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM