2011-01-04 15 views
6

Guten Morgen,Keine Konsole Ausgabe auf cout

Ich habe ein Problem mit Eclipse-IDE für C/C++ - Entwickler.

Ich schreibe ein kleines Tool zum Konvertieren von Strings. Während des Testens an einem Punkt Eclipse gestoppt, um Konsolenausgabe geben. z. B.
cout<<"test";
wird nicht angezeigt.

Aber es ist nicht überall ... ein anderes Beispiel:

// 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; 
} 

Die Fehlermeldung wird korrekt angezeigt, wenn das Argument fehlt. Aber wenn das Argument gibt und das Programm weiterhin die Testausgänge:

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

werden nicht angezeigt ...
mir fehlt etwas offensichtlich?

Vielen Dank im Voraus!

+0

Ich habe Eclipse noch nicht verwendet, bin aber sicher, dass der Code einwandfrei funktioniert. Wenn es zufällig in der Zeile 'CommandConverter a (argv [1]);' abstürzt und Sie nicht über den Absturz benachrichtigt werden, sehen Sie keine Ausgabe. –

+0

Was passiert, wenn Sie in der Befehlszeile ausgeführt werden? – Nim

+0

Ich führe es atm nur auf der Kommandozeile ... aber dies durch Eclipse-Konsole ... sollte das gleiche sein, nicht wahr? - Code stürzt dort nicht ab ... es macht viel später ... Für weitere Analysen brauche ich den output. Wenn ich debugge und diesen Punkt übergebe, wird einfach nichts angezeigt:/ – Beasly

Antwort

11

Sie müssen die Ausgabezeichenfolgen mit Newline beenden, z. B .: `cout < <" Test \ n "` `. Der Grund dafür ist, dass die Standardausgabe gepuffert ist und der Puffer auf Newline gelöscht wird. Es gibt wahrscheinlich eine Möglichkeit, den Cout-Puffer zu leeren, ohne einen Zeilenumbruch auszugeben, aber ich weiß es nicht auswendig. Beinhaltet wahrscheinlich Zugriff auf den zugrunde liegenden streambuf (über die rdbuf-Methode).

+11

Besser noch verwenden 'endl' – ismail

+0

Ich habe es gerade versucht ... das gleiche Verhalten :( – Beasly

+5

hast du versucht mit std :: endl wie Ismail sagt? Das soll tatsächlich den Ausgabepuffer fliuchen . '\ n' ist nicht. – stijn

1

Ich hatte ein ähnliches Problem. In meinem Fall würde das Programm eine Ausgabe ausgeben, wenn es über die Befehlszeile, aber nicht über die Eclipse-Konsole ausgeführt wird. Die Lösung bestand darin, die 32-Bit-Version von Eclipse und nicht die 64-Bit-Version zu verwenden.

Ich habe gelesen, dass es ein Fehler war. Könnte nicht das gleiche Problem sein.

-3

versuchen, einen Platz am Anfang jeder Zeile die Ausgabe

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

+1

Cargo-Kult-Programmierung FTW! – sbk

3

Für mich ist die 32-Bit-Versionen von Eclipse (Indigo 3.7) und die 32 Installation Bit Java JDK/JRE hat nicht funktioniert. Ich verwende die viel schnellere Lösung aus dem Eclipse-CDT/User/FAQ:

Zitat von 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

Diese Windows-Problemumgehung funktioniert auch für Eclipse 3.8 64-Bit mit CDT 6.0 auf Ubuntu 12.10 64-Bit. – Lucas

0

ich auch diese Informationen Suche wurde genau, wenn ich das auf der Microsoft-Website gefunden http://support.microsoft.com/kb/94227

ich denke, eine einfache Methode ist std :: flush zu verwenden, wenn Sie die Spülung des internen Puffers erzwingen wollen, die cout

verwendet
0

Dies passiert, wenn Sie Ihren Code debuggen und die Ausgabe bis zum letzten nicht sehen. Verwendung

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

die Ausgabe sofort auf stdout zu sehen (Konsole)

-1

Hallo nach einem ähnlichen Kampf, den ich herausgefunden, dass das erste Element der Umwelt PATH-Variable Eigenschaften des Projektes „C sein muss: \ MinGW \Behälter;" Andernfalls könnte eine falsche Version verwendet werden, insbesondere wenn Sie einen anderen Compiler verwenden.