作者yantchen (球童Yanting)
看板NTUE-CS102
標題[閒聊] 吸痂
時間Tue Jun 1 23:35:25 2010
關於 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