作者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
1F:→ garfield112:等等补推 06/01 23:36
2F:推 gcobc12632:未看先推 06/01 23:36
3F:推 pk873:看完推 超极实用!! 06/01 23:39
4F:推 garfield112:推推推 06/01 23:45
5F:推 CaptainWill:吸痂 囧 06/01 23:46
6F:推 vampirejie:推推推!! 06/01 23:47
7F:推 Arashinoon:死完复活推 06/02 00:35
8F:推 gcobc12632:阿辣洗刚死吗 06/02 00:35
9F:→ s86186654418:好感伤唷 06/02 00:36
10F:→ gcobc12632:科科 06/02 00:36