作者cliffchang2 (cliffchang2)
看板C_and_CPP
標題[問題] fprintf 資料覆蓋
時間Tue Feb 28 16:55:20 2017
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1488272123.A.ADC.html
1F:推 a21802: repeat fopen? 02/28 16:59
2F:推 LPH66: \r 是螢幕專用, 寫檔的話這些控制字元沒有用 02/28 17:08
3F:→ LPH66: 最直覺的方式是 rewind(fout) 之後再寫入 02/28 17:10
4F:→ LPH66: 不過要小心後來的資料太短沒有全部蓋掉的話會有殘餘留下 02/28 17:10
5F:→ LPH66: 不過你已經有 \n 了那就是第一個換行之後的東西都別管就好 02/28 17:11
6F:→ LPH66: 真的要全蓋掉的話可以考慮例如每次都多輸出固定數量的空白 02/28 17:11
成功了感謝
如果陣列數固定(這裡為2)的話應該就不會有殘留的問題了吧?
※ 編輯: cliffchang2 (140.120.90.230), 02/28/2017 17:18:11
7F:推 LPH66: 1234.5 1234.5 跟 0.6 0.7 字元數就不一樣 02/28 17:20
有發現後來資料短時會殘留的問題了
決定手動把換行後的資料刪掉即可
再次感謝
※ 編輯: cliffchang2 (140.120.90.230), 02/28/2017 17:25:49
8F:→ laladeer: fseek不可以嗎? 02/28 22:16
9F:推 LPH66: 可以啊, 不過既然要蓋掉舊資料那 rewind 稍微簡潔一點 03/02 14:26
10F:→ LPH66: 你也可以直接寫 fseek(fout, 0, SEEK_SET); 意思是一樣的 03/02 14:27