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 */
}
stdout が行バッファリングされていることは知っていますが、そのような状況で '\n' 文字を入れたくありません。Cで入力要求の直前に出力を取得する唯一の正しい方法は、fflush / fclose /などを使用していますか?