2017-10-11 97 views
1

當處理從cin讀取不同類型的輸入時,我原本以爲開始閱讀就好像輸入是整數。如果失敗,請將其作爲字符串讀取。讀取來自cin的不同類型的輸入

它工作正常,直到我試圖讀取諸如「+」,「 - 」等運算符。進入if(!fail)後,它會要求輸入另一個輸入(如「+」,「 - 」等操作符)。這期間,輸入甚至不應該被讀取

這裏是代碼:

void RPNCalc::run() 
{ 
    int numInput; bool boolInput = false; string stringInput; char charInput; 
    while (stringInput != "quit") 
    { 
     cin >> numInput; 
     if (!cin) 
     { 
      cout << "not an int" << endl; 
      cin.clear(); 
      cin >> stringInput; 
      cout << stringInput << endl; 
      readNonNumInput(stringInput, boolInput); 
     } 
     else 
     { 
      Datum temp = Datum(numInput); 
      calculator.push(temp); 
     } 
    } 
} 

當讀取運營商爲CIN,它無法讀取它作爲一個整數後,它在某種程度上失去了運營商在緩衝。例如,如果我輸入「+」,它將無法被讀取爲整數,因此它將打印語句「not an int」。但是,由於「+」以某種方式在緩衝區中丟失,因此沒有任何內容可讀入到stringInput中。而對於其他字符串輸入,它不能被讀作整數,並且該字符串仍然存在於緩衝區中,隨後可以讀入到stringInput中。

這是我對這裏發生的事情的理解。但我可能是錯的。

回答

1

總是讀一個字符串,然後嘗試轉換。當您嘗試讀取數字時,「+/-」被消耗,因爲它們可能是數字的字符串表示的一部分

相關問題