Std:: cout не будет печатать

Есть ли какие-либо обстоятельства, когда std::cout << "hello" не работает? У меня есть код c/С++, однако std::cout ничего не печатает, даже постоянные строки (например, "привет" ).

Есть ли способ проверить, способен ли cout/неспособен открыть поток? Существуют некоторые функции-члены, такие как good(), bad(),... но я не знаю, какой из них подходит для меня.

Ответ 1

Убедитесь, что вы сбросили поток. Это необходимо, потому что выходные потоки буферизованы, и у вас нет гарантии, когда буфера будет очищено, если вы вручную не очистите его самостоятельно.

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

std::endl выводит новую строку и очищает поток. Альтернативно, std::flush будет просто делать флеш. Промывка также может выполняться с использованием функции члена потока:

std::cout.flush();

Ответ 2

Вероятно, что std::cout не работает из-за буферизации (то, что вы пишете, заканчивается в буфере std::cout вместо вывода).

Вы можете сделать одно из следующих действий:

  • сбросить std::cout явно:

    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
    
  • используйте std::cerr. std::cerr не буферизуется, но использует другой поток (т.е. второе решение может не работать для вас, если вас интересует больше, чем "см. сообщение на консоли" ).

Ответ 3

Чтобы эффективно отключить буферизацию, вы можете вызвать это:

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

В качестве альтернативы вы можете вызвать свою программу и отключить буферизацию вывода в командной строке:

stdbuf -o 0 ./yourprogram --yourargs

Имейте в виду, что это обычно не выполняется по соображениям производительности.

Ответ 4

std :: cout не будет работать на приложениях с графическим интерфейсом!

Специфично для MS Visual Studio: Если вы хотите использовать консольное приложение и использовать MS Visual Studio, задайте для свойства проекта "Linker → System → SubSystem" значение Console. После создания нового проекта Win32 (для собственного приложения C++) в Visual Studio этот параметр по умолчанию устанавливается на "Windows", что не позволяет std :: cout выводить какие-либо выходные данные на консоль.