#include <iostream>
#include <stdio.h>
int main () {
std::ios::sync_with_stdio(false);
std::cout << "hi from c++\n";
printf("hi from c\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
删除std :: endl并在\ out语句中放置\ n后,输出更改为以下内容:
hi from c
hi from c++
Run Code Online (Sandbox Code Playgroud)
这是一个缓冲问题。
默认情况下,当标准输出连接到端子时,stdout是行缓冲的,这意味着缓冲区已刷新,并且输出实际在换行符上写入到端子。
当C stdio与C ++标准流断开连接时,std::cout将对其进行完全缓冲,这意味着在显式刷新(使用例如std::flush或std::endl操纵器)或缓冲区已满时实际写入输出。
C stdout和C ++ 使用的两个缓冲区std::cout是不同的,并且没有连接。
程序退出时也会发生缓冲区刷新。
程序中发生的事情是,printf由于字符串中尾随换行符,带有的输出会立即被刷新。但是std::cout仅在程序退出时才刷新输出到。