2017-01-19 39 views
0

我有一些代码需要在段落中并在每个句子之后开始一个新行。如何在C++中用新行输出一个缓冲区

我想用新行缓冲终端中的输出,但添加“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

[刷新cout之前读取输入使用cin ..为什么?]可能的重复(http://stackoverflow.com/questions/2704752/flushing-of-cout-prior-to-reading-input-using- cin-why) – Barmar

+0

在每次新建一行新行之前,我都尝试使用类型刷新“cout”,但似乎并未允许首先创建新行。 – Vyff

+0

@CodingPig几乎是正确的。如果你在输入之前需要额外的一行,我认为你所需要做的就是将注释掉的一行移动一个大括号。 – user4581301

回答

-1

注释行永远不会工作,因为它永远不会被调用。在它之前,你有一个无限循环for(;;)

+0

循环内有一个“break”。 –

+0

一旦没有更多的阅读或需要EOF退出并执行程序的其他部分,cin是不会退出的? – Vyff

+0

休息将永远不会发生 - cin总是坚实的。 –