std :: cout не печатает буквы после \ n в QNX - PullRequest
0 голосов
/ 29 января 2019

Я хочу напечатать список элементов, хранящихся в одной строке.Я не знаю, почему пропущен последний элемент!

У вас есть идея, почему?

#include <iostream>
#include <string>

int main() {
  std::string string_test{"Item1\nItem2\nItem3"};
  std::cout << string_test;

  return 0;
}

Вывод:

Item1
Item2

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Если вы можете использовать std::cerr вместо std::cout, на std::cerr сброс выполняется автоматически

#include <iostream>
#include <string>

int main()
{
    std::string string_test{"Item1\nItem2\nItem3"};
    std::cerr << string_test;

    return 0;
}
0 голосов
/ 29 января 2019

Сообщается об ошибке в потоке с линейным буферизацией в QNX версии 7.0.3.

Источник

0 голосов
/ 29 января 2019

В POSIX 2017 реализация C ++ - , а не , необходимая для сброса стандартного вывода программы при завершении программы 1 .Твой нет.Вам необходимо сделать это вручную:

#include <iostream>
#include <string>

int main()
{
    std::string string_test{"Item1\nItem2\nItem3"};
    std::cout << string_test << std::flush;
}

1)

Базовые спецификации открытых групп, выпуск 7, выпуск 2018 года

В соответствии со стандартом ISO C использование возврата из main() имеет такое же поведение (кроме как в отношении проблем с областью действия языка), что и вызов exit() с возвращаемым значением.Достижение конца функции main() аналогично вызову exit(0).

[...]

Функции _Exit() и _exit() не должны вызывать зарегистрированные функциис atexit() ни с какими зарегистрированными обработчиками сигналов. [Option Start] Открытые потоки не должны сбрасываться. [Option End] Завершение открытых потоков (без очистки) определяется реализацией.Наконец, процесс вызова должен быть прекращен с последствиями, описанными ниже.

...