2011-06-30 15 views
0

続行を要求せずにEnterキーを押すだけでループを止める方法を知りたい場合は、ここにコードを入力してください:ユーザーがビジュアル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

それは動作しません。文字列に演算子>>を使用すると、有効な文字を入力するまで待つだけで、改行を含む空白は無視されます。 –

+0

非常に真です。どうも。私はgetl​​ine()で私の答えを編集しました(私はあなたの答えからそれを取った)。 – jakubka

関連する問題