2009-07-05 6 views
1

私は約1ヶ月間C++を習得していますが、私はプログラムを書いているので、ユーザーが(cinループ中に)痛みです。例えば、ユーザの入力を受け取りベクトルに格納するプログラムは、このようなcinループを持ちます。ユーザーのキーボード入力を処理するための効果的な方法は何ですか?

vector<int>reftest; 
    int number; 
    cout << "Input numbers for your vector.\n"; 
    while(cin >> number) 
       reftest.push_back(number); 

理想的には、単にEnterキーを押すユーザーのためになる、とプログラムのためのループを終了するのではなく、空白で読んでいないので、私はこれが処理されるかどうかはわかりません。代わりに、何か醜いものは通常、入力を取り消すために特定の文字を入力するようにユーザーに指示するような場合に終わる。

ユーザー入力を処理するために使用する方法はありますか?

char option; 
do 
{ 
    cout << "do you want to input another number? (y)es/(n)o..." << endl; 
    cin >> option; 
    if (option == 'y') 
     acceptInput(); // here enter whatever code you need 
} 
while (option != 'n'); 

答えて

3

あなたの問題にアプローチするには、いくつかの方法があります。このような第二のループをすることについてどのように

0

。最も簡単なのはおそらく直接cin/coutループから抜け出し、代わりにstd :: getlineを使うことでしょう。 (cin.failを使用して、(私はそれが*文字列の代わりに文字の上に動作するための大ファンではない)

#include <iostream> 
#include <vector> 
#include <sstream> 
using namespace std; 

int main(int argc, char **argv) 
{ 
    vector<int> reftest; 

    while (true) 
    { 
    string input; 
    getline(cin, input); 

    // You can do whatever processing you need to do 
    // including checking for special values or whatever 
    // right here. 

    if (input.size() == 0) // empty input string 
    { 
     cout << "Assuming you're bored with the Entering Numbers game." << endl; 
     break; 
    } 
    else 
    { 
     int value; 
     // Instead of using the input stream to get integers, we 
     // used the input stream to get strings, which we turn 
     // into integers like this: 

     istringstream iss (input); 
     while (iss >> value) 
     { 
     reftest.push_back(value); 
     cout << "Inserting value: " << value << endl; 
     } 
    } 
    } 
} 

他のアプローチはcin.getlineを(含める):具体的には、あなたのような何かを書くことができ)ビットを使って入力値が良いかどうかなどを調べることができます。また、環境によっては、iostreamよりも多くの豊富な入力方法があります。しかし、これはあなたが必要とする情報に向けてあなたを指し示すべきです。

+0

私はむしろ、ユーザーはすべての入力後に多くを求めるのではなく、すべての数字を入力するだけで済みます。 – Alex

0

私は恐らくこれを行う良い方法はありません。現実のインタラクティブなプログラムは、ストリームから入力されたフォーマット済みの(またはフォーマットされていない、それに従う)入力をキーボードを読み取るために使用するのではなく、オペレーティングシステム特有の方法を使用します。