[問題] fprintf 資料覆蓋

看板C_and_CPP (C/C++)作者 (cliffchang2)時間9年前 (2017/02/28 16:55), 9年前編輯推噓4(406)
留言10則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 寫了一個陣列想要存到txt檔中 但因為陣列內容會隨時更新 所以想要在每次輸入的同時將前一組數據刪除 以達到txt檔中的陣列內容為最新的數據結果 請問有這種刪除前一個結果的指令嗎? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) FILE *fout; fout=fopen("123.txt","wt"); float a[2]; fprintf(fout,"%.1f %.1f\n",a[0],a[1]); //目前的存法為一直換行往下 fclose(fout); 補充說明(Supplement): 曾經試過\r 不過似乎不會覆蓋 而是在最前面進行下一個輸出 感謝各位協助 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.120.90.230 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1488272123.A.ADC.html

02/28 16:59, , 1F
repeat fopen?
02/28 16:59, 1F

02/28 17:08, , 2F
\r 是螢幕專用, 寫檔的話這些控制字元沒有用
02/28 17:08, 2F

02/28 17:10, , 3F
最直覺的方式是 rewind(fout) 之後再寫入
02/28 17:10, 3F

02/28 17:10, , 4F
不過要小心後來的資料太短沒有全部蓋掉的話會有殘餘留下
02/28 17:10, 4F

02/28 17:11, , 5F
不過你已經有 \n 了那就是第一個換行之後的東西都別管就好
02/28 17:11, 5F

02/28 17:11, , 6F
真的要全蓋掉的話可以考慮例如每次都多輸出固定數量的空白
02/28 17:11, 6F
成功了感謝 如果陣列數固定(這裡為2)的話應該就不會有殘留的問題了吧? ※ 編輯: cliffchang2 (140.120.90.230), 02/28/2017 17:18:11

02/28 17:20, , 7F
1234.5 1234.5 跟 0.6 0.7 字元數就不一樣
02/28 17:20, 7F
有發現後來資料短時會殘留的問題了 決定手動把換行後的資料刪掉即可 再次感謝 ※ 編輯: cliffchang2 (140.120.90.230), 02/28/2017 17:25:49

02/28 22:16, , 8F
fseek不可以嗎?
02/28 22:16, 8F

03/02 14:26, , 9F
可以啊, 不過既然要蓋掉舊資料那 rewind 稍微簡潔一點
03/02 14:26, 9F

03/02 14:27, , 10F
你也可以直接寫 fseek(fout, 0, SEEK_SET); 意思是一樣的
03/02 14:27, 10F
文章代碼(AID): #1OjJhxhS (C_and_CPP)
文章代碼(AID): #1OjJhxhS (C_and_CPP)