2017-01-19 8 views
0

段落を取り、すべての文の後に新しい行を開始するコードがあります。C++で1行に新しい行を出力する方法

ターミナルの出力を新しい行でバッファしたいが、 "std :: cout < < endl;"を追加する。ループの外側は機能していないようです。ターミナルに入力された入力を出力から分離する際の助けとなります。

私は動作すると予想されるコードをコメントアウトしましたが、そうではありません。

#include <iostream> 
#include <string> 
using namespace std; 

int main() { 

    // std::cout << std::endl; 

    for (;;) { 
    string line; 
    getline(std::cin, line); 
    if (!cin) { 
     break; 
    } 
    for (unsigned int i = 0; i < line.length(); ++i) { 
     const string text = line.substr(i, 1); 
     if (text == "." || text == "?" || text == "!") { 
      std::cout << text; 
      std::cout << std::endl; 
     }else{ 
      std::cout << text; 
     } 
    } 
    } 

    // std::cout << std::endl; 

    return 0; 
} 
+0

[cinを使用して入力を読み取る前に[coutのフラッシング]の可能な複製はなぜですか?](http://stackoverflow.com/questions/2704752/flushing-of-cout-prior-to-reading-input-using- cin-why) – Barmar

+0

私は、新しい行のそれぞれの新しいプッシュの前に型で "cout"をフラッシュしようとしましたが、新しい行が最初に作成されるようには見えません。 – Vyff

+0

@コーディングピッグはほぼ正しいです。入力の前に余分な行が必要な場合は、コメントアウトされた行を1つのブレースに移動するだけです。 – user4581301

答えて

-1

コメント行は決して呼び出されないため、決して動作しません。あなたはそれの前に無限ループfor(;;)を持っています。

+0

ループ内に 'break'があります。 –

+0

!cinが終了すると、それ以上読むことはできませんか、終了してプログラムの他の部分を実行するにはEOFが必要ですか? – Vyff

+0

ブレークは決して打たれません - cinは常に固いです。 –

関連する問題