簡體   English   中英

在QNX中,std :: cout在\\ n后不打印字母

[英]std::cout doesn't print letters after \n in QNX

我想打印存儲在單個字符串中的項目列表。 我不知道為什么最后一個項目被跳過!

你知道為什么嗎?

#include <iostream>
#include <string>

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

  return 0;
}

輸出為:

Item1
Item2

在QNX版本7.0.3上,這是報告的行緩沖流輸出中的錯誤。

資源

下POSIX 2017,C ++實現要求在程序終止1以沖洗程序的標准輸出。 你的不是。 您需要手動執行以下操作:

#include <iostream>
#include <string>

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

1)

Open Group基本規范第7期,2018年版

根據ISO C標准的要求,使用main() return具有與使用返回的值調用exit()相同的行為(關於語言范圍問題除外exit() 到達main()函數的末尾與調用exit(0)具有相同的行為。

[...]

_Exit()_exit()函數不得調用在atexit()或任何已注冊信號處理程序中注冊的函數。 [選項開始]不得沖洗打開的流。 [選項結束]是否關閉打開的流(不刷新)是實現定義的。 最后,呼叫過程將終止,並產生以下所述的后果。

如果你能使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM