Pregunta

Cuando se utiliza iostream en C ++ en Linux, se muestra la salida del programa en la terminal, pero en Windows, sólo se guarda la salida a un archivo stdout.txt. ¿Cómo puedo, en Windows, hacer que la salida aparecen en la consola?

¿Fue útil?

Solución

Ya que menciona stdout.txt I google'd para ver lo que crearía exactamente un stdout.txt; Normalmente, incluso con una aplicación de Windows, salida de la consola va a la consola asignado, o la nada si uno no está asignado.

Así que, suponiendo que está utilizando SDL (que es la única cosa que hizo subir a stdout.txt), usted debe seguir el consejo aquí . De cualquier stdout freopen y stderr con "CON", o hacer la otra enlazador / compilar soluciones allí.

En caso de que el enlace se rompe una vez más, aquí es exactamente lo que se ha hecho referencia a libSDL:

  

¿Cómo puedo evitar la creación de stdout.txt y stderr.txt?

     

"Creo que dentro del Visual C ++ proyecto que viene con SDL hay un objetivo SDL_nostdio> usted puede construir lo que hace lo que quiere (TM)."

     

"Si se define 'NO_STDIO_REDIRECT' y recompilar SDL, creo que va a solucionar el problema." >> (Respuesta por cortesía de Bill Kendrick)

Otros consejos

Puede añadir una consola a una aplicación no sea de consola de Windows utilizando el procedimiento descrito en la Adición de consola I / O a una GUI App Win32 .

No es conjunto hilo en GameDev. neto sobre el tema.

Para la depuración en Visual Studio se puede imprimir en la consola de depuración:

OutputDebugStringW(L"My output string.");

Si usted tiene una aplicación de Windows ninguno-consola, puede crear una consola con el AllocConsole función. Una vez creado, puede escribir en él utilizando los métodos normales std :: cout.

En primer lugar, ¿qué compilador o entorno de desarrollo está usando? Si Visual Studio, que necesita para hacer un proyecto de aplicación de consola para obtener salida de la consola.

En segundo lugar,

std::cout << "Hello World" << std::endl;

debería funcionar en cualquier aplicación de consola de C ++.

El AllocConsole función de la API de Windows se crear una ventana de la consola para su aplicación.

Si está utilizando Visual Studio tiene que modificar el propiedad del proyecto Propiedades de configuración -> vinculador -> Sistema -.> subsistema

Esto se debe establecer en: Consola (/ SUBSYSTEM: Consola)

También debe cambiar su WinMain que ser de esta firma:

int main(int argc, char **argv)
{
    //...
    return 0;
}

Si está utilizando Visual Studio, que debería funcionar bien!

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 que ha seleccionado una aplicación de consola Win32 al crear un nuevo proyecto. Todavía se puede redirigir la salida de su proyecto a un archivo utilizando el conmutador de consola (>>). En realidad, esto volverá a dirigir el tubo de la consola lejos de la salida estándar a su archivo. (Por ejemplo, myprog.exe >> myfile.txt).

Me gustaría que no me equivoco!

Si se utiliza el subsistema: consola o subsistema: ventanas tipo de depende de si la forma en que desea iniciar su aplicación:

  • Si utiliza el subsistema: consola, a continuación, se obtiene toda la salida estándar por escrito a la terminal. El problema es que si se inicia la aplicación desde el menú Inicio / Desktop, (por defecto) recibe una consola que aparece así como la ventana de la aplicación (que puede parecer bastante feo).
  • Si utiliza subsistemas: ventanas, no se va a stdout / stderr incluso si se ejecuta la aplicación de un DOS ventana, Cygwin , u otro terminal.

Si desea que el camino del medio, que es a la salida de la terminal si la aplicación se inició en un terminal, a continuación, siga el enlace que Lucas proporciona en su solución ( http://dslweb.nwnexus.com/~ast/dload/guicon.htm )

A modo de referencia, me encontré con este problema con una aplicación que quiero correr, ya sea en modo normal o modo de proceso por lotes de Windows (es decir, como parte de una secuencia de comandos) en función de los modificadores de línea de comandos. Toda la diferenciación entre aplicaciones de consola y Windows es un poco extraño a la gente de Unix!

Su aplicación debe ser compilado como una aplicación de consola de Windows.

Asumo que está utilizando una versión de Visual Studio? En las ventanas, std::cout << "something"; debería escribir algo a una ventana de la consola si su programa se configura en la configuración del proyecto como un programa de consola.

No necesariamente tienen que realizar ningún cambio en su código (ni para cambiar el tipo SUBSYSTEM). Si se desea, también podría simplemente tubería stdout y stderr a una aplicación de consola (Windows versión de cat funciona bien).

Si se utiliza MinGW , añadir una opción, -Wl,subsystem,console o -mconsole.

Hay una buena solución

if (AllocConsole() == 0)
{
    // Handle error here. Use ::GetLastError() to get the error.
}

// Redirect CRT standard input, output and error handles to the console window.
FILE * pNewStdout = nullptr;
FILE * pNewStderr = nullptr;
FILE * pNewStdin = nullptr;

::freopen_s(&pNewStdout, "CONOUT$", "w", stdout);
::freopen_s(&pNewStderr, "CONOUT$", "w", stderr);
::freopen_s(&pNewStdin, "CONIN$", "r", stdin);

// Clear the error state for all of the C++ standard streams. Attempting to accessing the streams before they refer
// to a valid target causes the stream to enter an error state. Clearing the error state will fix this problem,
// which seems to occur in newer version of Visual Studio even when the console has not been read from or written
// to yet.
std::cout.clear();
std::cerr.clear();
std::cin.clear();

std::wcout.clear();
std::wcerr.clear();
std::wcin.clear();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top