精華區beta NTUE-CS102 關於我們 聯絡資訊
關於 fstream .. 迷思1 : 一個 fstream 只能用對應一個檔案 → X fstream fin; fin.open("a.txt"); // fin >> fin.close(); fin.open("b.txt"); // fin >> fstream 是可以回收再利用的 迷思2 : eof 的使用 eof 建議在課本那個 get 的例子用就好 因為會有 \n結尾(空白行結束) 跟數字結尾 兩種情況 建議的使用方式 1 : if(file.fail()) break; 讀不到東西的時候 break; 例如 while(true) { file>>a; if(file.fail()) break; if(a==n) // else // } 建議的使用方式 2 : while(file>>a) 王老有說過 stream 物件在 >> 或 << 之後 會 return 回來 stream 所以如果他讀取失敗 那個while就會被return接收到錯誤而跳出while 例如 while(file>>a) { if(a==n) // else // } 迷思3 : fstream 先用 in 開檔 再用 out 開檔 結果檔案被清空寫不進去 → 這裡課本沒說 必須要先 clear 清除狀態 close 也沒用 fstream file("1.txt", ios_base::in); file>>a; file.close(); file.open("1.txt", ios_base::out); file<<a; // 會寫入失敗 file.close(); fstream 一旦被標示為 in 或者 out 他就被定型了 除非你 clear 他的狀態 解決方法1 : file.clear(); 解決方法2 : in的fstream就永遠用in, out的就永遠用out 建議的使用方法 我的習慣跟鳳郎講的很像 把 fstream 取成 fin 跟 fout 就好像 cin 跟 cout 一樣 就不會錯了 另外 建議用 ifstream 跟 ofstream 取代 fstream → 程式一開始寫 ifstream fin; ofstream fout; fin.open("num.txt"); fout.open("num2.txt"); // fin>>a; // fout<<a; fin.close(); fout.close(); fin.open("num2.txt"); fout.open("num.txt"); // fin>>a; // fout<<a; 這樣就不會錯了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.127.36.183
garfield112:等等補推 06/01 23:36
gcobc12632:未看先推 06/01 23:36
pk873:看完推 超極實用!! 06/01 23:39
garfield112:推推推 06/01 23:45
CaptainWill:吸痂 囧 06/01 23:46
vampirejie:推推推!! 06/01 23:47
Arashinoon:死完復活推 06/02 00:35
gcobc12632:阿辣洗剛死嗎 06/02 00:35
s86186654418:好感傷唷 06/02 00:36
gcobc12632:科科 06/02 00:36