看板 C_and_CPP 關於我們 聯絡資訊
代碼在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