[問題] 為什麼不加 endl 就沒辦法輸出

看板C_and_CPP (C/C++)作者 (かえで)時間2年前 (2021/05/22 02:06), 2年前編輯推噓1(1014)
留言15則, 3人參與, 2年前最新討論串1/1
代碼在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

05/22 04:34, 2年前 , 1F
在 repl 上感覺是被 \r 坑了而已,它實際上是有印出來的
05/22 04:34, 1F

05/22 04:35, 2年前 , 2F
喔喔,你電腦上也是 ubuntu ,那就是 \r 的問題吧
05/22 04:35, 2F

05/22 04:35, 2年前 , 3F
你可以試試看 printf("2\r"); 你可能也不會看到它的輸出
05/22 04:35, 3F

05/22 04:37, 2年前 , 4F
或者 printf("2\r1") 你可能只會看到一個 "1",因為 \r 把
05/22 04:37, 4F

05/22 04:38, 2年前 , 5F
要印的 cursor 又移到最前面了,所以前面的 2 會被後面的
05/22 04:38, 5F

05/22 04:38, 2年前 , 6F
輸出蓋掉,導致你沒看到它
05/22 04:38, 6F
哦!!!! 真的耶 WTF 我找bug找了好久 謝謝你 在linux上砍掉換行,重新自己手動enter一個,刷掉windows的換行就好了 ※ 編輯: hunandy14 (111.108.22.165 日本), 05/22/2021 12:40:28

05/22 12:41, 2年前 , 7F
./main > out.txt,再把 out.txt 開起來看,你就知道是
05/22 12:41, 7F

05/22 12:41, 2年前 , 8F
不是真的沒輸出了
05/22 12:41, 8F
有!! 有東西 ※ 編輯: hunandy14 (111.108.22.165 日本), 05/22/2021 12:56:10

05/22 14:08, 2年前 , 9F
這樣說吧, 寫 C/C++ 只有很少的機會會寫出 \r
05/22 14:08, 9F

05/22 14:09, 2年前 , 10F
如果只是單純要換行的話 \n 就夠用了
05/22 14:09, 10F

05/22 14:10, 2年前 , 11F
會用 \r 的大概只有 (1) 螢幕顯示單行更新 (如單行進度條)
05/22 14:10, 11F

05/22 14:10, 2年前 , 12F
(2) 處理的根本就是二進位資料
05/22 14:10, 12F

05/22 14:11, 2年前 , 13F
單行更新原理就是前幾樓提的 \r 的作用: 移游標到這行開頭
05/22 14:11, 13F

05/22 14:11, 2年前 , 14F
C++ 的 endl 其實只是印出 "\n" 後加 flush 而已
05/22 14:11, 14F
原來是這樣,我是直接從windwos把檔案複製過去,才導致殘留在上面(完全沒注意到) 想說怎麼這麼神奇,印出來的東西還會有本來應該在尾端的右括號的跑去前面 感謝各位的幫忙 ヾ(‧ω‧`)o ※ 編輯: hunandy14 (111.108.22.165 日本), 05/22/2021 19:05:25

05/22 19:50, 2年前 , 15F
dos2unix <- 好用
05/22 19:50, 15F
文章代碼(AID): #1Wf_Qtbi (C_and_CPP)
文章代碼(AID): #1Wf_Qtbi (C_and_CPP)