2011-06-30 40 views
0

我想知道如何停止一個while循環,當用戶只需輸入Enter而不要求繼續或,這裏是我的代碼:當用戶只需在visual C++或代碼塊中輸入一個輸入時打破循環

int main() 
{ 
    bool flag = true; 
    int userInput; 

    while(flag){ 
     cout<<"Give an Integer: "; 
     if(!(cin >> userInput)){ flag = false; break;} 
     foo(userInput); 
    } 
} 

在此先感謝。

+0

什麼是你的代碼錯誤? –

+0

問題是,當用戶只是輸入一個空行,我的循環沒有結束,它仍然要求輸入。 – Controlmaster

回答

1

使用getline。如果字符串爲空,則中斷。然後將該字符串轉換爲一個int。

for(std::string line;;) 
{ 
    std::cout << "Give an Integer: "; 
    std::getline(std::cin, line); 
    if (line.empty()) 
     break; 
    int userInput = std::stoi(line); 
    foo(userInput); 
} 

std::stoi將在失敗時拋出異常,然後處理您想要的。

+0

很好的答案,但我不知道是否有更好的方法來做到這一點。無論如何感謝您的回答,我會試一試。 – Controlmaster

2

試試這個:

#include <iostream> 
#include <string> 
#include <sstream> 

using namespace std; 

int main() 
{ 
    int userInput; 
    string strInput; 

    while(true){ 
     cout<<"Give an Integer: "; 
     getline(cin, strInput); 
     if (strInput.empty()) 
     { 
      break; 
     } 

     istringstream myStream(strInput); 
     if (!(myStream>>userInput)) 
     {  
      continue; // conversion error 
     } 

     foo(userInput); 
    } 

    return 0; 
} 
+0

這是行不通的。使用operator >>和一個字符串,cin會一直等到輸入有效的字符,忽略任何空格,包括換行符。 –

+0

非常真實。謝謝。我用getline()編輯了我的答案(我從你的答案中拿出了答案)。 – jakubka