2012-08-26 21 views
8

Duplicar posible:
Does reading from stdin flush stdout?stdout y stdin relaciones

garantías C++ estándar que todos los datos contenidos en la memoria intermedia se imprimirán antes de la próxima llamada a std :: cin. De esta manera:

#include <iostream> 

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

Debido a esto:

ISO/IEC 14882: 2011

27.4.2 objetos estrecha corriente [narrow.stream.objects]

2 Después de que el objeto cin se inicializa, cin.tie() devuelve & cout. Su estado es diferente de lo requerido para basic_ios :: init (27.5.5.2). objetos

27.4.3 ancha corriente [wide.stream.objects]

2 Después de la WCIN objeto se inicializa, wcin.tie() devuelve & wcout. Su estado es el mismo que se requiere para basic_ios :: init (27.5.5.2).

Pero en C realmente no hay garantías de que todo lo que contiene el búfer stdout se imprimirá antes de cualquier intento de stdin?

#include <stdio.h> 

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

sé que es la salida estándar búfer de línea pero no quieren poner '\ n' personaje en este tipo de situaciones. ¿Usar fflush/fclose/etc es la única forma correcta de obtener resultados justo antes de la solicitud de entrada en C?

+0

Si su pregunta se refiere a C (y no sobre el uso de stdio en C++), por favor, etiquetarlo con C y C++ no. – Mat

+2

Agregué la etiqueta C, pero esta pregunta es sobre la comparación IO C y C++, por lo que me gustaría conservar también la etiqueta C++. – FrozenHeart

+0

Oh, ha pasado un tiempo desde que una pregunta aquí despertó mi interés. Nunca le había prestado atención al 'tie', estaré viendo esto :) –

Respuesta

3

No conocía la relación cin/cout en C++, gracias. En C, no sé otra forma de eliminar el buffer stdout. Siempre uso fflush cuando necesito estar seguro de que la salida se ha imprimido en un momento dado.

Cuestiones relacionadas