2011-01-04 8 views
6

Buenos días,Sin salida de consola en cout

Tengo un problema con Eclipse IDE para C/C++ Developers.

Estoy escribiendo una pequeña herramienta para convertir cadenas. Mientras se realizaba la prueba en algún punto el eclipse se detuvo para dar salida a la consola. por ejemplo .:
cout<<"test";
no se muestra.

pero no lo es en todas partes ... otro ejemplo:

// File path as argument 
int main(int argc, char* argv[]) { 
if (argc != 2) { 
    cout 
      << "ERROR: Wrong amount of arguments! Only one allowed...\n"; 
    cout << "\n" << "Programm closed...\n\n"; 
    exit(1); 
} 

CommandConverter a(argv[1]); 
cout<<"test"; 
a.getCommandsFromCSV(); 
cout<<"test2"; 

return 0; 
} 

El mensaje de error se muestra correctamente si el argumento no se encuentra. Pero si el argumento es no y el programa continúa las salidas de prueba:

cout<<"test";
cout<<"test2";

no se muestran ...
estoy perdiendo algo obvio?

¡Gracias de antemano!

+0

No he usado Eclipse, pero ¿está seguro de que su código funciona bien? Si, por casualidad, se bloquea en la línea 'CommandConverter a (argv [1]);', y no recibe la notificación del bloqueo, no verá ningún resultado. –

+0

¿Qué sucede si se ejecuta en la línea de comando? – Nim

+0

Lo estoy ejecutando en cajero automático solo en la línea de comandos ... pero hacerlo a través de la consola de eclipse ... debería ser el mismo ¿no? - El código no se cuelga allí ... lo hace mucho más tarde ... para un análisis más profundo, necesito salir. Si depuro y paso ese punto simplemente no se muestra nada:/ – Beasly

Respuesta

11

Debe finalizar cadenas de salida con nueva línea, por ejemplo: `cout < <" test \ n "` `. La razón es que la salida estándar está almacenada en un búfer y el búfer se vacía en la línea nueva. Probablemente exista una forma de descargar el búfer cout sin generar una nueva línea, pero no lo sé de memoria. Probablemente incluye el acceso al streambuf subyacente (a través del método rdbuf).

+11

Mejor aún usar 'endl' – ismail

+0

Acabo de probarlo ... el mismo comportamiento :( – Beasly

+5

¿has probado con std :: endl como dice Ismail? Se supone que esto debe fluch el buffer de salida . '\ n' no es. – stijn

1

Tuve un problema similar. En mi caso, el programa daría salida si se ejecuta desde la línea de comandos pero no desde la consola de eclipse. La solución fue utilizar la versión de eclipse de 32 bits y no la de 64 bits.

Leí que era un error. Puede que no sea el mismo problema.

-3

intentar dar salida a un espacio al principio de cada línea

cout < < "" < < .....

+1

Programación de culto a la carga FTW! – sbk

3

Para mí la instalación de las versiones de 32 bits de Eclipse (Indigo 3.7) y el 32 poco Java JDK/JRE no funcionó. Yo uso la solución mucho más rápida de la Eclipse CDT/usuario/Preguntas:

Presupuesto de Eclipse CDT/User/FAQ - Eclipse console does not show output on Windows:

Eclipse console does not show output on Windows In Eclipse CDT on Windows, standard output of the program being run or debugged is fully buffered, because it is not connected to a Windwos console, but to a pipe. See bug 173732 for more details. Either add fflush calls after every printf or add the following lines in the start of the main function:

setvbuf(stdout, NULL, _IONBF, 0); 
setvbuf(stderr, NULL, _IONBF, 0); 
+0

Esta solución alternativa de Windows también funciona para Eclipse 3.8 de 64 bits con CDT 6.0 en Ubuntu 12.10 de 64 bits. – Lucas

0

Yo también estaba buscando exactamente esta información cuando encontré esto en el sitio web de Microsoft http://support.microsoft.com/kb/94227

creo un método sencillo es utilizar std :: ras cuando se quiere forzar a vaciar el búfer interno que utiliza cout

*std::cout << ... << std::flush;* 
0

Esto sucede cuando depura su código y no ve la salida hasta la última. uso

cout<<"what ever overloads"<< flush; 

para ver la salida inmediatamente después de la salida estándar (consola)

-1

Hola después de una lucha similar que me di cuenta, que el primer elemento de las propiedades del proyecto variable PATH medio ambiente debe ser "C: \ MinGW \compartimiento;" De lo contrario, se podría usar una versión incorrecta, especialmente si usa un compilador diferente.

Cuestiones relacionadas