[爆卦]cout不換行是什麼?優點缺點精華區懶人包

為什麼這篇cout不換行鄉民發文收入到精華區:因為在cout不換行這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者hunandy14 (かえで)看板C_and_CPP標題[問題] 為什麼不加 endl 就沒辦法...


代碼在VS2019上執行是正常的,但是在gcc上卻出了奇怪的狀況

想請問為什麼這段代碼裡面的 cout 只要結尾沒有 endl 就沒辦法輸出了

https://replit.com/@hunandy14/svtest
網站可以直接執行,錯誤的情況跟我在電腦上跑的是一樣的


電腦上的gcc版本
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
g++ -std=c++17 -o main main.cpp; ./main

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.108.22.165 (日本)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1621620407.A.96C.html
※ 編輯: hunandy14 (111.108.22.165 日本), 05/22/2021 02:09:30
oToToT: 在 repl 上感覺是被 \r 坑了而已,它實際上是有印出來的 05/22 04:34
oToToT: 喔喔,你電腦上也是 ubuntu ,那就是 \r 的問題吧 05/22 04:35
oToToT: 你可以試試看 printf("2\r"); 你可能也不會看到它的輸出 05/22 04:35
oToToT: 或者 printf("2\r1") 你可能只會看到一個 "1",因為 \r 把 05/22 04:37
oToToT: 要印的 cursor 又移到最前面了,所以前面的 2 會被後面的 05/22 04:38
oToToT: 輸出蓋掉,導致你沒看到它 05/22 04:38
哦!!!! 真的耶 WTF 我找bug找了好久 謝謝你
在linux上砍掉換行,重新自己手動enter一個,刷掉windows的換行就好了
※ 編輯: hunandy14 (111.108.22.165 日本), 05/22/2021 12:40:28
Lipraxde: ./main > out.txt,再把 out.txt 開起來看,你就知道是 05/22 12:41
Lipraxde: 不是真的沒輸出了 05/22 12:41
有!! 有東西
※ 編輯: hunandy14 (111.108.22.165 日本), 05/22/2021 12:56:10
LPH66: 這樣說吧, 寫 C/C++ 只有很少的機會會寫出 \r 05/22 14:08
LPH66: 如果只是單純要換行的話 \n 就夠用了 05/22 14:09
LPH66: 會用 \r 的大概只有 (1) 螢幕顯示單行更新 (如單行進度條) 05/22 14:10
LPH66: (2) 處理的根本就是二進位資料 05/22 14:10
LPH66: 單行更新原理就是前幾樓提的 \r 的作用: 移游標到這行開頭 05/22 14:11
LPH66: C++ 的 endl 其實只是印出 "\n" 後加 flush 而已 05/22 14:11
原來是這樣,我是直接從windwos把檔案複製過去,才導致殘留在上面(完全沒注意到)
想說怎麼這麼神奇,印出來的東西還會有本來應該在尾端的右括號的跑去前面

感謝各位的幫忙 ヾ(‧ω‧`)o
※ 編輯: hunandy14 (111.108.22.165 日本), 05/22/2021 19:05:25
Lipraxde: dos2unix <- 好用 05/22 19:50
rex0707: 推樓上 我以前也遇過從win複製文字檔到centos會有問題 05/29 19:11

你可能也想看看

搜尋相關網站