2017-09-04 22 views
0

例をhereから取得しました。std :: cin.getlineは入力を待ちません

関連するコード:

char line[chat_message::max_body_length + 1]; 

    while (std::cin.getline(line, chat_message::max_body_length + 1)) 
    { 
     chat_message msg; 
     msg.body_length(std::strlen(line)); 
     std::memcpy(msg.body(), line, msg.body_length()); 
     msg.encode_header(); 
     c.write(msg); 
    } 

    c.close(); 
    t.join(); 

アプリケーションは即座にチャットメッセージを置くために私を待たずに終了 私が代わりにコンソールアプリケーションのWindowsを使用して期待コードに一切変更を加えていない(私はまだです。 Alloc & AttachConsoleでコンソールを接続する

答えて

0

短いストーリー、あなたのstd::cin istreamは無効です。 std::cin.getlineは、std::cinを表すstd::istreamへの参照を返します。継承検索を戻すと、から派生したstd::cinのオーバーロードは、operator boolオーバーロードを持ち、ストリーム上のbadbitまたはerrorbitが設定されているとfalseを返します。

伝統的な方法では設定されていないため、私はあなたのコンソールに賭けていますが、std::cinに正しく取り付けられていません。