Выводит строку на консоль с помощью функции cout.write() только после того, как я выйду из приложения

Вставка строки с помощью cin.getline() и желание напечатать эту строку на консоль с помощью cout.write(). Печатает введенную строку после выхода из приложения

#include<iostream.h>
#include<conio.h>
int main() {
char str[20];
cout<<"Enter a string:";
cin.getline(str,20);
cout<<"Entered string:";
cout.write(str,20);
cout.flush();
getch();
return 0;
}

Поставьте cout.flush(); после cout.write(str,20);

πάντα ῥεῖ 02.03.2019 15:40

@πάντα ῥεῖ работает, но также печатает «<» после строки. Я использую Turbo C++ для практики.

Ayushi Sharma 02.03.2019 15:46

Взгляните на: stackoverflow.com/questions/213907/c-stdendl-vs-n

mrflash818 02.03.2019 15:55

@AyushiSharma Я более подробно объясняю поведение в ответе, который я написал.

πάντα ῥεῖ 02.03.2019 15:57

@AyushiSharma Кстати, <iostream.h> и <conio.h> не являются стандартными заголовками C++. Вы, вероятно, используете компилятор turbo-C++, который уже устарел в конце прошлого тысячелетия. Подумайте об использовании более современного компилятора для изучения С++.

πάντα ῥεῖ 02.03.2019 16:01

@AyushiSharma не редактируйте ответы людей на свой вопрос, это означает, что ваш код теперь не демонстрирует проблему, указанную в вашем вопросе, что немного сбивает с толку.

Alan Birtles 02.03.2019 17:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
285
2

Ответы 2

Вывод в потоки обычно буферизованный. Если буфер не сброшен (что происходит, когда вы полностью заполняете буфер или явно румянец), то вывод фактически не будет записан.

Буфер потока также очищается, когда объект потока закрывается, что происходит, когда std::cout уничтожается как часть завершения программы. Вот почему вы видите вывод, когда программа выходит.

Таким образом, решение простое: явно сбрасывать буфер (используя, например, std::cout.flush();) после каждой записи.

std::ostreamреализации типа std::cout обычно работают в буфере. Это означает, что реализация std::ostream собирает то, что передается при вызовах write(), в буфер, и только если буфер исчерпан, фактическое содержимое будет отправлено на физическое устройство (терминал или файл, проявленный в хранилище).

Чтобы запустить поток, записывающий содержимое буфера в терминал или в файл, вы должны явно вызвать std::ostream::flush() (обратите внимание, что std::endl манипулятор ввода-вывода делает это неявно).

Другие вопросы по теме