que - Cómo salir a la consola en C++/Windows
programacion c++ pdf (13)
Al usar iostream en C ++ en Linux, muestra la salida del programa en el terminal, pero en Windows, simplemente guarda el resultado en un archivo stdout.txt. ¿Cómo puedo, en Windows, hacer que la salida aparezca en la consola?
¿Supongo que estás usando alguna versión de Visual Studio? En windows, std::cout << "something";
debería escribir algo en una ventana de consola SI su programa está configurado en la configuración del proyecto como un programa de consola.
En primer lugar, ¿qué compilador o entorno de desarrollo está utilizando? Si es Visual Studio, debe crear un proyecto de aplicación de consola para obtener la salida de la consola.
Segundo,
std::cout << "Hello World" << std::endl;
debería funcionar en cualquier aplicación de consola C ++.
La función API de Windows de AllocConsole creará una ventana de consola para su aplicación.
Si tiene una aplicación de Windows sin consola, puede crear una consola con la función AllocConsole . Una vez creado, puede escribir utilizando los métodos std :: cout normales.
Su aplicación debe compilarse como una aplicación de consola de Windows.
Desde que mencionaste stdout.txt lo busqué en Google para ver exactamente qué crearía un stdout.txt; normalmente, incluso con una aplicación de Windows, la salida de la consola va a la consola asignada, o a ninguna parte si no está asignada.
Entonces, suponiendo que esté usando SDL (que es lo único que apareció en stdout.txt), debe seguir los consejos que se encuentran aquí . O bien freopen stdout y stderr con "CON", o las otras soluciones de engarce / compilación allí.
En caso de que el enlace se rompa nuevamente, aquí es exactamente a lo que se hizo referencia desde libSDL:
¿Cómo evito crear stdout.txt y stderr.txt?
"Creo que dentro del proyecto Visual C ++ que viene con SDL hay un objetivo SDL_nostdio> que puedes construir y que hace lo que deseas (TM)".
"Si defines" NO_STDIO_REDIRECT "y recompilas SDL, creo que solucionará el problema". >> (Respuesta cortesía de Bill Kendrick)
Para la depuración en Visual Studio puede imprimir a la consola de depuración:
OutputDebugStringW(L"My output string.");
Puede agregar una consola a una aplicación que no sea de consola de Windows utilizando el proceso descrito en Agregar E / S de consola a una aplicación Win32 GUI .
Hay un hilo completo en gamedev.net sobre el tema.
Si está usando Visual Studio, ¡debería funcionar perfectamente!
Aquí hay un ejemplo de código:
#include <iostream>
using namespace std;
int main (int) {
cout << "This will print to the console!" << endl;
}
Asegúrese de elegir una aplicación de consola Win32 al crear un nuevo proyecto. Aún así, puede redirigir la salida de su proyecto a un archivo utilizando el interruptor de la consola (>>). Esto realmente redirigirá la tubería de la consola desde la salida estándar a su archivo. (por ejemplo, myprog.exe >> myfile.txt
).
¡Ojalá no me equivoque!
Si está usando Visual Studio, necesita modificar la propiedad del proyecto : Propiedades de configuración -> Enlazador -> Sistema -> SubSistema .
Esto debe establecerse en: Consola (/ SUBSISTEMA: CONSOLA)
También debe cambiar su WinMain para que sea esta firma:
int main(int argc, char **argv)
{
//...
return 0;
}
Si usa MinGW , agregue una opción, -Wl,subsystem,console
o -mconsole
.
Ya sea para usar el subsistema: consola o subsistema: Windows depende de si desea iniciar su aplicación:
- Si usa el subsistema: consola, obtendrá todos los stdout escritos en la terminal. El problema es que si inicia la aplicación desde el Menú de inicio / Escritorio, usted (de forma predeterminada) obtiene una consola que aparece así como también la ventana de la aplicación (que puede verse bastante fea).
- Si usa el subsistema: windows, no obtendrá stdout / stderr aunque ejecute la aplicación desde una ventana de DOS , Cygwin u otra terminal.
Si desea la vía intermedia que debe enviar al terminal SI la aplicación se inició en un terminal, siga el enlace que proporcionó Luke en su solución ( http://dslweb.nwnexus.com/~ast/dload/guicon. htm )
Como referencia, me encontré con este problema con una aplicación que deseo ejecutar tanto en modo normal de Windows como en modo por lotes (es decir, como parte de un script) dependiendo de los modificadores de la línea de comandos. ¡La diferenciación total entre la consola y las aplicaciones de Windows es un poco extraña para la gente de Unix!
No es necesario que realice ningún cambio en el código (ni cambie el tipo de SUBSYSTEM
). Si lo desea, también puede simplemente conectar stdout y stderr a una aplicación de consola (una versión de Windows de cat
funciona bien).