2016-09-29 12 views
0

私はC++に新たなんだとここに私のコードです:C++:Ctrl + dキーを押して入力ループを終了すると、最後の入力が選択されないのはなぜですか?

int main(int argc, const char * argv[]) { 

    vector<double> nums; 
    double input; 
    while (cin >> input) { 
     nums.push_back(input); 
    } 

    for (int i = 0; i < nums.size(); i++) { 
     cout << nums[i] << endl; 
    } 

    return 0; 
} 

プログラムが実行されると、I入力3つの数字この方法:

Enter numbers: 1 2 3 

と右私はimediately押され、3を入力した後、 ctrl+dおよびenter。ただし、2つの番号だけが印刷されます。

3と入力した直後にenter, ctrl+d, enterを押すと、3つの数字が印刷されます。

どのようにキーを押しても、3つの数字をすべて印刷する方法をお伝えしたいと思います。前もって感謝します。

+0

ctr^Dが3 @ – Raindrop7

+0

@ Raindrop7の後にあるので、これを回避する方法はないと言っていますか?私は3時以降にenterを押す必要がありますか? –

+0

3の後でctrl + dの前にスペースを入れるとどうなりますか? – Gavin

答えて

0

あなたのC++コードは問題ありません。これは、これを引き起こしているシェルの端末設定です。^Dは、Linux端末(^ DはUnixまたはMacを意味します)に入力された行は、行が送信されるまで解釈されません。私の主張が正しいことを確認し、このようなファイルを作成するには:

echo -n 1 2 3 > /tmp/stuff.txt 

を今すぐ無終端の改行がファイルに

cat /tmp/stuff.txt 

しないことをダブルチェックあなたは改行の欠如に気付くでしょう。今すぐあなたのプログラムを実行する - うまくいく - ファイルに対して

./a.out < /tmp/stuff.txt 

それはうまくいきました。

+0

Johnさん、ありがとうございました。しかし、私は最後のステップをどのように行うのですか? –

+0

右のステップでは、プログラムがa.outと呼ばれ、C++のコマンドラインで-oを使用しない場合のデフォルトの出力プログラム名を前提としています。 a.outの代わりにすでに使用しているプログラム名を使用してください。うまくいけば、それはすべて動作し、あなたは承認された答えとしてこれを打つことができます、ありがとう。 –

+0

ありがとうジョン、私は今それを実行することができました。 –

関連する問題