为什么下面的程序在C++中给予不同的输出?

ajsxfq5m  于 2023-04-13  发布在  其他
关注(0)|答案(3)|浏览(108)

下面的程序一次打印1 2 3 4 5。这意味着打印输出没有时间延迟。

#include<iostream>
#include<stdio.h>
#include <thread>
using namespace std;
int main()
{
  for(int i = 1; i <= 5; ++i)
  {
    cout << i << " ";
    // Function to sleep the thread
    this_thread::sleep_for(500ms);
  }
  return 0;
}

但是这个程序会打印
1
2
3
4
5
一个接一个,这意味着我得到的输出有0.5秒的时间延迟。

#include<iostream>
#include<stdio.h>
#include <thread>
using namespace std;
int main()
{
  for(int i = 1; i <= 5; ++i)
  {
    cout << i << "\n";
    // Function to sleep thread
    // for 0.5 sec
    this_thread::sleep_for(500ms);
  }
  return 0;
}

在上述两个方案中究竟发生了什么?
注意:在线编译器中看不到两个输出的区别,因为它们显示的是程序终止后的结果。

sxpgvts3

sxpgvts31#

输出可以是行缓冲的,在这种情况下,只有完整的行被发送到底层输出设备。

myzjeezk

myzjeezk2#

我能够得到所需的输出,一次显示一个元素,延迟0.5秒。使用visual studio 2015。
我建议你避免在线编译器。
它们通常在文本框中给予一次完整的输出。

luaexgnf

luaexgnf3#

"\n"使输出转到下一行。它是换行符。

相关问题