2016-05-20 10 views
-1

私はここ数年前から触れていないC++をもう一度学んでいます。私は理解できないような独特のバグに遭遇しました。なぜ私のコードは説明なしで終了するのですか?

次のコードを実行すると、期待通りに10個の入力が受け付けられますが、最初のforループの直後にプログラムが終了します。私はgdbでそれを実行して問題を見つけ出しましたが、プロセスが「正常に終了しました」と報告しました。 g++ -std=c++11

#include <iostream> 
#include <string> 

using namespace std; 

int main() { 
    //User inputs 
    string input[10]; 
    //Get the inputs 
    for(int i = 0; i < 10; i++) { 
     //Get this input 
     printf("%i> ", i); 
     getline(cin, input[i]); 
    } 
    //The application does not make it to this point 
    //Collected 
    printf("Thank you for submitting your data.\n"); 
    //Print inputs 
    for(int a = 0; a < 10; a++) { 
     //Show the input 
     printf("%i> %s\n", a, input[a].c_str()); 
    } 
} 
+3

は[こちら]ファインワークス(https://ideone.com/68wsNx)。これをIDEで実行していますか? – NathanOliver

+0

私は[c9.io](http://c9.io)を使ってプログラムをコンパイルしてから、ターミナルから手動で起動します。 –

+1

'cin.get();'をプログラムの最後の行に追加して、それがウィンドウを開いたままにしているかどうか確認できますか?それが以下の答えであれば、あなたが必要とするものです。 – NathanOliver

答えて

0

あなたのアプリケーションを使用してコンパイル

私は何をすべきかを想定しているん:

アプリケーションが(getlineが実行をブロックしているので)、それはいくつかの操作を行いますgetline()(10回)で一時停止しますforループでは、何かと終わり(おそらくコンソールウィンドウを閉じる)を表示します。実行をブロックするために何かを追加すると(Enterキーを押すのを待つcin.get()など)、結果は表示されます(アプリケーションは終了しないため)。プログラムの終了後に出力が削除されないどこかでコードを実行すると、印刷されたものが表示されます。

+0

テキストはまったく印刷されません。 –

+0

それは私のために働く:まず '0>'が印刷され、次に10回入力を入力してすべての入力を印刷します。 – PcAF

2

説明する内容に基づいて、プログラムが終了する前に標準出力がフラッシュされていないように見えます。これは珍しいことです。通常、stdoutはラインバッファ動作のために自動的に設定されます。この場合、改行が発生するとすぐにフラッシュされます。

@ NathanOliverのアドバイスに従い、printfではなくcout << ...を使用することをお勧めします。 printfコマンドはCへの後退であり、C++コンパイラとC++機能を使用しています。実際には、printfに通常必要なヘッダーを含めていないので、コンパイルしても少し驚いています。あなたがprintfを引き続き使用することを選択した場合

FWIW、多分手動でそのように最後に標準出力をフラッシュしてみてください。

fflush(stdout); 
関連する問題