it-swarm.com.de

std :: cout wird nicht gedruckt

Gibt es einen Umstand, wenn std::cout << "hello" nicht funktioniert? Ich habe einen c/c ++ - Code, aber der std::cout druckt nichts, nicht einmal konstante Zeichenketten (wie "Hallo"). 

Gibt es eine Möglichkeit zu überprüfen, ob cout den Stream öffnen kann/kann? Es gibt einige Memberfunktionen wie good(), bad(), ... aber ich weiß nicht, welche für mich geeignet ist.

20
mahmood

Stellen Sie sicher, dass Sie den Stream spülen. Dies ist erforderlich, da die Ausgabeströme gepuffert sind und Sie keine Garantie dafür haben, wann der Puffer geleert wird, wenn Sie ihn nicht manuell leeren.

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

std::endl gibt eine neue Zeile aus und leert den Stream. Alternativ kann std::flush nur die Spülung durchführen. Das Flushing kann auch mit der Member-Funktion des Streams durchgeführt werden:

std::cout.flush();
37

Es ist wahrscheinlich, dass std::cout aufgrund von Pufferung nicht funktioniert (das, was Sie schreiben, landet im Puffer von std::cout und nicht in der Ausgabe).

Sie können eines dieser Dinge tun:

  • std::cout explizit spülen:

    std::cout << "test" << std::flush; // std::flush is in <iostream>
    

    std::cout << "test";
    std::cout.flush(); // explicitly flush here
    

    std::cout << "test" << std::endl; // endl sends newline char(s) and then flushes
    
  • verwenden Sie stattdessen std::cerr. std::cerr ist nicht gepuffert, verwendet jedoch einen anderen Stream (d. h., die zweite Lösung funktioniert möglicherweise nicht für Sie, wenn Sie mehr als "siehe Meldung in der Konsole" sehen).

5
utnapistim

Um die Pufferung effektiv zu deaktivieren, können Sie Folgendes aufrufen:

std::setvbuf(stdout, NULL, _IONBF, 0);

Alternativ können Sie Ihr Programm aufrufen und die Ausgabepufferung in der Befehlszeile deaktivieren:

stdbuf -o 0 ./yourprogram --yourargs

Beachten Sie, dass dies aus Leistungsgründen normalerweise nicht durchgeführt wird.

1
Nicolay77

std :: cout funktioniert nicht mit GUI-Apps!

Spezifisch für MS Visual Studio : Wenn Sie eine Konsolenanwendung wünschen und MS Visual Studio verwenden möchten, setzen Sie die Projekteigenschaft "Linker -> System -> SubSystem" auf Console. Nach dem Erstellen eines neuen Win32-Projekts (für eine native C++ - Anwendung) in Visual Studio ist diese Einstellung standardmäßig auf "Windows" gesetzt, wodurch verhindert wird, dass std :: cout Ausgaben an die Konsole überträgt.

0
Jan Paulmann