【问题标题】:c++ not writing to console unless a newline was encountered除非遇到换行符,否则c ++不会写入控制台
【发布时间】:2012-08-27 02:33:18
【问题描述】:

我最近正在编写一个涉及套接字的简单 C++ 程序。自从我使用 c++ 以来已经有一段时间了,所以我正在做一些简单的完整性检查以确保我的类被正确构造。那时我遇到了一个非常奇怪的错误。当我在输出到控制台的末尾没有\nendl 时,它不会写入控制台。例如:

这不会输出到控制台

class Server{
    public:
        Server(){
            std::cout << "STARTING SERVER";
        }
};

这会:

class Server{
    public:
        Server(){
            std::cout << "STARTING SERVER" << std::endl;
        }
};

两者都是使用Server server; 创建的。这只是我电脑中的“幽灵”还是以前有人遇到过这种情况?

【问题讨论】:

    标签: c++ constructor newline stdout


    【解决方案1】:

    这很正常。它存储在缓冲区中,直到缓冲区被刷新。您可以将std::flush 发送到流以刷新它。您可以使用std::endl 写入行尾并刷新缓冲区。如果您将大量小东西写入流中,这基本上是一种避免大量 I/O 操作的优化。

    【讨论】:

    • 自动刷新整行对我来说是新的。它在endl 上刷新,因为它相当于'\n' 加上flush
    • 也许在您的答案中添加std::cout &lt;&lt; "foo" &lt;&lt; std::flush;std::cout &lt;&lt; "foo" &lt;&lt; std::endl; 以确保完整性并给新手一个提示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多