2012-08-26 16 views
8

Eventuali duplicati:
Does reading from stdin flush stdout?stdout e stdin relazioni

garanzie C++ standard che tutti i dati contenuti nel buffer saranno stampate prima chiamata successiva a std :: cin. Come questo:

#include <iostream> 

void bar() 
{ 
    int x; 
    std::cout << "Enter an integer: "; /* 1 */ 
    std::cin >> x; /* 2 */ 
} 

A causa di questo:

ISO/IEC 14882: 2011

27.4.2 oggetti flusso stretto [narrow.stream.objects]

2 Dopo l'inizializzazione dell'oggetto cin, cin.tie() restituisce & cout. Lo stato è altrimenti uguale a quello richiesto per basic_ios :: init (27.5.5.2). Oggetti

27.4.3 allargare il getto [wide.stream.objects]

2 Dopo il wcin oggetto viene inizializzato, wcin.tie() restituisce & wcout. Lo stato è altrimenti uguale a quello richiesto per basic_ios :: init (27.5.5.2).

Ma in C non ci sono davvero garanzie che tutto ciò che è contenuto nel buffer di stdout verrà stampato prima di qualsiasi tentativo di stdin?

#include <stdio.h> 

void bar() 
{ 
    int x; 
    printf("Enter an integer: "); /* 1 */ 
    scanf("%d", &x); /* 2 */ 
} 

so che stdout è la linea tamponato, ma io non voglio mettere '\ n' personaggio in tali situazioni. Usare fflush/fclose/etc è l'unico modo giusto per ottenere l'output giusto prima della richiesta di input in C?

+0

Se la tua domanda è di circa C (e non sull'utilizzo di stdio in C++), si prega di contrassegnare con C e non C++. – Mat

+2

Ho aggiunto il tag C ma questa domanda riguarda il confronto tra C e C++ IO, quindi vorrei anche tenere il tag C++. – FrozenHeart

+0

Oh, è passato un po 'di tempo da quando una domanda ha suscitato il mio interesse. Non avevo mai prestato attenzione a 'legare', starò a guardare questo :) –

risposta

3

Non conoscevo la relazione cin/cout in C++, grazie. In C, non conosco altro modo per svuotare il buffer stdout. Io uso sempre fflush quando devo essere sicuro che l'output sia stato stampato in un dato momento.

Problemi correlati