Quando si utilizza iostream in C++ su Linux, visualizza l'output del programma nel terminale, ma in Windows salva solo l'output in un file stdout.txt. Come posso, in Windows, far apparire l'output nella console?Come eseguire l'output sulla console in C++/Windows
risposta
Dato che hai menzionato stdout.txt, l'ho fatto per vedere cosa avrebbe creato uno stdout.testo; normalmente, anche con un'app di Windows, l'output della console passa alla console allocata o in nessun posto se non ne viene assegnato uno.
Quindi, supponendo che si stia utilizzando SDL (che è l'unica cosa che ha richiamato stdout.txt), è necessario seguire il consiglio here. O freopen stdout e stderr con "CON", o fai l'altro linker/compilare soluzioni alternative lì.
Nel caso in cui il collegamento si rompe di nuovo, qui è esattamente ciò che è stato riferito da libSDL:
Come posso evitare di creare stdout.txt e stderr.txt?
"Credo che all'interno del progetto Visual C++ fornito con SDL sia presente un obiettivo SDL_nostdio> è possibile creare ciò che fa ciò che si desidera (TM)."
"Se si definisce" NO_STDIO_REDIRECT "e si ricompila SDL, penso che risolverà il problema." >> (Risposta per gentile concessione di Bill Kendrick)
L'applicazione deve essere compilata come un'applicazione console Windows.
Suppongo tu stia utilizzando una versione di Visual Studio? In Windows, std::cout << "something";
dovrebbe scrivere qualcosa su una finestra della console SE il tuo programma è configurato nelle impostazioni del progetto come un programma di console.
Prima di tutto, quale ambiente di compilatore o dev stai usando? Se Visual Studio, è necessario creare un progetto di applicazione per console per ottenere l'output della console.
In secondo luogo,
std::cout << "Hello World" << std::endl;
dovrebbe funzionare in qualsiasi applicazione console C++.
No, che invia all'uscita standard - e che non scrive sempre sulla console (a seconda di come è allocato). Da qui la domanda dell'OP, e il motivo per cui leggo questo thread quasi due anni dopo! :-) – winwaed
È possibile aggiungere una console a un'applicazione Windows senza console utilizzando la procedura descritta in Adding Console I/O to a Win32 GUI App.
C'è a whole thread on gamedev.net sull'argomento.
Se si sta utilizzando Visual Studio è necessario modificare la proprietà progetto: Proprietà di configurazione ->Linker -> Sistema ->sottosistema.
Questo dovrebbe essere impostato su: Console (/ SUBSYSTEM: CONSOLE)
Inoltre si dovrebbe cambiare la vostra WinMain essere questa firma:
int main(int argc, char **argv)
{
//...
return 0;
}
Se si utilizza Visual Studio, è dovrebbe funzionare bene!
Ecco un esempio di codice:
#include <iostream>
using namespace std;
int main (int) {
cout << "This will print to the console!" << endl;
}
Assicurarsi si è scelto un'applicazione console Win32 quando si crea un nuovo progetto. È comunque possibile reindirizzare l'output del progetto in un file utilizzando lo switch di console (>>). In questo modo reindirizzare la pipe della console dallo stdout al tuo file. (ad esempio, myprog.exe >> myfile.txt
).
Vorrei non sbagliarmi!
Se si dispone di un'applicazione per Windows senza console, è possibile creare una console con la funzione AllocConsole. Una volta creato, puoi scriverlo usando i normali metodi std :: cout.
Penso che devi ancora reindirizzare i descrittori io per farlo funzionare (come fa l'esempio guicon). In alternativa, usa invece OutputDebugString. – rogerdpack
La funzione API di Windows AllocConsole creerà una finestra della console per l'applicazione.
se utilizzare sottosistema: console o sottosistema: finestre tipo di dipende dal fatto che come si desidera avviare l'applicazione:
- Se si utilizza sottosistema: console , quindi si ottiene tutto lo stdout scritto sul terminale. Il problema è che se si avvia l'applicazione dal menu Start/Desktop, si ottiene automaticamente una console e la finestra dell'applicazione (che può apparire piuttosto brutta).
- Se si utilizza il sottosistema: windows, non sarà possibile ottenere stdout/stderr anche se si esegue l'applicazione da una finestra DOS, Cygwin o un altro terminale.
Se si desidera che la via di mezzo, che è quello di uscita al terminale se l'applicazione è stata avviata in un terminale, quindi seguire il link che Luca fornito nella sua soluzione (http://dslweb.nwnexus.com/~ast/dload/guicon.htm)
Per avere un riferimento, mi sono imbattuto in questo problema con un'applicazione che voglio eseguire in una normale modalità Windows o in modalità batch (ovvero, come parte di uno script) a seconda delle opzioni della riga di comando. L'intera differenziazione tra console e applicazioni Windows è un po 'bizzarra per gli Unix!
Hai bisogno di cambiare un po' l'esempio nel link: sostituisci AllocConsole() con AttachConsole (ATTACH_PARENT_PROCESS) per l'output sulla stessa console che ha avviato l'applicazione, se l'applicazione è stata avviata su una console . In caso contrario, questa funzione restituirà 0. – Ruud
Se si utilizza MinGW, aggiungere un'opzione, -Wl,subsystem,console
o -mconsole
.
Per il debug in Visual Studio è possibile stampare alla console di debug:
OutputDebugStringW(L"My output string.");
Non è necessariamente bisogno di apportare modifiche al codice (né di modificare il tipo di SUBSYSTEM
). Se lo desideri, potresti anche semplicemente pipe stdout and stderr to a console application (una versione Windows di cat
funziona bene).
Grazie mille! Questo mi ha seccato per un bel po 'di tempo –