[閒聊] 吸痂
關於 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
→
06/01 23:36, , 1F
06/01 23:36, 1F
推
06/01 23:36, , 2F
06/01 23:36, 2F
推
06/01 23:39, , 3F
06/01 23:39, 3F
推
06/01 23:45, , 4F
06/01 23:45, 4F
推
06/01 23:46, , 5F
06/01 23:46, 5F
推
06/01 23:47, , 6F
06/01 23:47, 6F
推
06/02 00:35, , 7F
06/02 00:35, 7F
推
06/02 00:35, , 8F
06/02 00:35, 8F
→
06/02 00:36, , 9F
06/02 00:36, 9F
→
06/02 00:36, , 10F
06/02 00:36, 10F