2017-04-16 5 views
1

だから、 '6、-15、12、44、...'のようなものを入力したいと思っています。 しかし、入力を入力してEnterキーを押すと何もしません。手紙を入力してEnterを押し、別の手紙を入力してEnterを押すと、最終的に希望の結果が返されます。 数字を入力してEnterキーを押すと、何も返されません。 誰かがここで間違っていることを正しい方向に向けることができますか?みんなありがとう。問題の説明が理にかなったことを願っています。打ってから戻ってこないC++ cin

int main() 
{ 

// The user inputs a string of numbers (e.g. "6, 4, -2, 88, ..etc") and those integers are then put into a vector named 'vec'. 
std::vector<int> vec; 

int value; 
std::cin >> value; 

if (std::cin) 
{ 

    vec.push_back(value); 
    char separator; 

    while (std::cin >> separator >> value) 
    { 
     vec.push_back(value); 
    } 

} 

std::cout << vec.size() << std::endl; 
for (int i = 0; i < vec.size(); i++) 
{ 
    std::cout << vec.at(i) << ' '; 
} 
std::cout << std::endl; 
} 
+1

あなたはwhileループを破るために、あなたの入力の末尾に追加センチネル(非数)を入力する必要があります。 –

答えて

2

しかし、入力を入力してEnterキーを押しても何もしません。

これは、プログラムの内容の誤った解釈です。デバッグ出力をプログラムに追加すると、プログラムが入力を処理していることがわかります。

while (std::cin >> separator >> value) 
{ 
    std::cout << "Read separator: " << separator << std::endl; 
    std::cout << "Read value: " << value << std::endl; 

    vec.push_back(value); 
} 

私は、文字と入力し、Enterキーを押します場合は、別の文字を入力してEnterキーを押しますが、それは最終的に所望の結果を返します。

テキスト行を入力した後にプログラムの入力を停止したいと思うようです。

を入力すると、whileループが停止しません。を入力してください。次の行の追加入力を待ちます。

文字を入力すると、separatorの入力が提供されています。別の文字を入力すると、std::cinがエラー状態になります。それはwhileループが壊れたときです。

あなたが本当に探していることであると私には思える:

  1. テキストの行を読みます。これにはstd::getlineを使用できます。
  2. テキストの行から数値を読み取ります。これにはstd::istringstreamを使用できます。
  3. データを出力します。

int main() 
{ 
    // The user inputs a string of numbers (e.g. "6, 4, -2, 88, ..etc") and those integers are then put into a vector named 'vec'. 
    std::vector<int> vec; 

    std::string line; 
    if (getline(std::cin, line)) 
    { 
     std::istringstream str(line); 

     int value; 
     str >> value; 
     vec.push_back(value); 
     char separator; 
     while (str >> separator >> value) 
     { 
     vec.push_back(value); 
     } 
    } 

    std::cout << vec.size() << std::endl; 
    for (int i = 0; i < vec.size(); i++) 
    { 
     std::cout << vec.at(i) << ' '; 
    } 
    std::cout << std::endl; 
} 
0

プログラムが入力を解析する方法を考えてください。まず各数字の後にカンマが必要ですが、入力の最後にカンマが必要ですか?第二に、あなたの読書はループを終わらせることができないと思いますか?

これは2つの文字を入力する必要があるためです.1つは区切り文字として最後に、2番目には整数の読み込みに失敗します。

+0

素晴らしい、おかげさまであなたの助けを借りてください:) –

関連する問題