2013-03-10 56 views
1

我希望能夠閱讀以下內容:CIN未能獲得輸入

myvar = { 1 2 3 5 } 

所以我所做的就是

string input; 
int intInput; 

cin >> input; //take in the varname, do stuff 
cin >> input; // check to make sure it's "=" 
if (input != "=") { 
    //stuff 
} 

cin >> input; //check to make sure it's "{" 
if (input != "{") { 
    //stuff 
} 

while (cin >> intInput) { 
    //stuff 
    cout << intInput << endl; 
} 

在這一點上,我的理解是,「 }「char已經存儲到intInput中,它結束了while循環。我想確保它以「}」結尾。

c.unget(); 
cin >> input; 
if (input != "}") { 
    //stuff 
} 

我以爲c.unget();會給我最後一個字符,在這種情況下是「}」,但當我輸入輸入值時,輸入仍然是「{」。

我該如何確定該設置以「}」字符結尾?

+0

'cin.unget();'將前一個輸入放回到輸入流中。嘗試刪除該行,看看會發生什麼。 – 2013-03-10 21:56:08

回答

2

如果您清點輸入你要得到一個「{」,因爲它是最後一個字符串在這裏閱讀:

cin >> input; //check to make sure it's "{" 

然後你把你的數字爲intInput。你可以代替使用串讀你輸入的全部時間,而且如果它不等於「}」

#include <cstdlib> 
while (cin >> input) { 
    if(input == "}") 
     break; 
    else 
     intInput = atoi(input.c_str()); //or whatever means you prefer to convert a string to int 
    cout << intInput << endl; 
} 

如果「}」被讀取,它打破了你的循環轉換爲整數。

+0

這看起來是正確的,但如果我想檢查輸入是否是int,該怎麼辦?我是否調用typeid(input).class()並檢查它是什麼類型的? – averageUsername123 2013-03-10 22:03:58

+1

@aaronjylee最直接的方法是一次遍歷字符串中的一個字符,並使用的isdigit()方法。如果你發現一個不是數字的字符,那麼你的字符串不是一個整數。 – 2013-03-10 22:06:44

0

我讀的std :: string,並檢查它是一個數字或「}」符號

while (cin >> stringInput) { 
    if (stringInput = "}") { 
     break; 
    } 
    if (sscanf(stringInput.c_str(), "%d", &intInput) == 0) { 
     //stuff 
    } 
} 

它可以更好地使用/寫一個詞法分析器雖然

1
#include <iostream> 
#include <sstream> 
using namespace std; 
int main() { 
    string name, buf; 
    cin >> name; 
    cin >> buf; // = 
    cin >> buf; // { 
    while(1) { 
     if(cin >> buf) { 
      if(buf == "}") break; 
      stringstream ss(buf); 
      int i; 
      ss >> i; 
      if(ss.fail()) { 
       cout << "fail" << endl; 
          //conversion error 
      } else { 
       cout << i << endl; 
      } 
     } else { 
      cout << "no }" << endl; 
        break; 
      //only if cin is reading from file, or wating for CTRL+D from terminal emulator 
     } 

    } 

} 
1

看看這個:

#include <iostream> 
#include <string> 
#include <sstream> 
using namespace std; 
int main() 
{ 
    int i; 
    string input; 
    while (cin >> input) 
    { 
     if (input == "}") 
      break; 
     else 
      stringstream(input) >> i; 

     cout << i << endl; 
    } 
} 
0

緩衝區將仍然包含用戶輸入的字符,如果它不是一個數字。它只會設置失敗標誌。然後再次讀取字符串:

string input; 
int intInput; 

cin >> input; //take in the varname, do stuff 
cin >> input; // check to make sure it's "=" 
if (input != "=") { 
    //stuff 
} 

cin >> input; //check to make sure it's "{" 
if (input != "{") { 
    //stuff 
} 

do { 
    cin >> int; 
    if (!cin) { 
     cin.clear(); // clear error flags 
     cin >> input; // read again as string 
     if (input != "}") { 
      // handle error 
     } 
    } 
    else 
     cout << intInput << endl; 
} while (input != "}");