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 выводить какие-либо выходные данные на консоль.