可能重复:
从标准输入读取是否会刷新标准输出?
C++ 标准保证在下次调用 std::cin 之前将打印缓冲区中包含的所有数据。像这样:
#include <iostream>
void bar()
{
int x;
std::cout << "Enter an integer: "; /* 1 */
std::cin >> x; /* 2 */
}
因为这:
ISO/IEC 14882:2011
27.4.2 窄流对象 [narrow.stream.objects]
2 初始化对象cin后,cin.tie()返回&cout。其状态与 basic_ios::init (27.5.5.2) 所需的其他状态相同。
27.4.3 宽流对象 [wide.stream.objects]
2 初始化对象 wcin 后,wcin.tie() 返回 &wcout。其状态与 basic_ios::init (27.5.5.2) 所需的其他状态相同。
但是在 C 中,真的不能保证 stdout 缓冲区中包含的所有内容都会在任何尝试 stdin 之前被打印?
#include <stdio.h>
void bar()
{
int x;
printf("Enter an integer: "); /* 1 */
scanf("%d", &x); /* 2 */
}
我知道标准输出是行缓冲的,但我不想在这种情况下放置 '\n' 字符。使用 fflush / fclose / etc 是在 C 中输入请求之前获得输出的唯一正确方法吗?