8

重複の可能性:
stdin からの読み取りは stdout をフラッシュしますか?

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 /などを使用していますか?

4

2 に答える 2

4

いいえ、そのような保証はありません。はい、fflush() を使用して stdout が確実にフラッシュされるようにすることができます。

この質問は密接に関連しています:標準入力からの読み取りは標準出力をフラッシュしますか?

于 2012-08-26T14:30:51.870 に答える
3

C++ の cin / cout 関係を知りませんでした、ありがとう。C では、stdout バッファーをフラッシュする他の方法がわかりません。出力が特定の時間に印刷されたことを確認する必要がある場合は、常にfflushを使用します。

于 2012-08-26T12:35:25.353 に答える