马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
不知大家有没有遇到过ifstream.close()的错误。我准备写一个统计BPA的dat文件内各卡片数量的程序,dat文件是以“(END)”结尾的文本文件。
9 o. K/ ~! x2 X* W! X0 ~& E当(END)出现在dat文件最后一行时,程序正常,但若(END)后有一个空行,执行到fin.close()这一步会出现错误,太莫名其妙了。敬请各位高手指教。5 i4 W5 }9 f/ B! b% S8 r
, g5 M5 K( f5 `% rvoid KBPAClass::CountList() //统计各类卡片的数量 2 f% { G* e, x ~# r. g
{ + q' T: O+ v' H7 j+ b; I6 D8 |: N/ \
if(m_strDatInFile=="") //检查DAT文件路径是否为空
4 p6 c0 f: E) g3 s* Z {8 x& E- F3 V6 h2 q$ s
cout<<"\n数据不完整,缺少DAT文件输入路径!";, k0 J" g; n* e! m( j7 U
exit(0);$ L2 D% n3 u1 N
}' w7 W/ n; S/ C/ W7 ?
ifstream fin(m_strDatInFile.c_str());" S- H( [. L/ e% ?3 p
if(!fin)
" ], g" x s8 _$ \/ e { m: M5 g+ j9 h: h
cout<<"\n不能打开DAT输入文件,程序退出"<<endl;
, m* P) a' t4 ^7 x& D; | y exit(0);
9 z* Y" a6 i$ Y; J/ O* z1 q0 s/ f }7 Z. H- M, |1 Q
char buffer[240]; //因为卡片有效位数为80(某些卡可能到90),但考虑到可能有空格,多设置一些
3 r0 s" `5 p/ M$ N while(int(fin.tellg())!=-1)
$ q+ ?* i- L3 s3 O5 ~/ h( }" i {9 r5 u) ?) n5 A* Z
for(int i=0;i<sizeof(buffer);i++)
! R. f/ @% h$ L; J$ T' G& M6 Z9 ` { s: O5 s! H8 D, K
fin.get(buffer[i]);2 h6 d9 @# S. h; y
if(buffer[i]=='\n'||fin.eof())
/ w" A) ~( a/ b/ k3 ?: b5 ` {
B( ~6 [1 D& N' ?! Q buffer[i]='\0';
& @ n0 _" C0 i, m' L! P break;
( V+ S, u( i1 ]7 \ }' w$ B5 G/ g( R0 i, z+ _
}8 [( W7 ` r$ m. T
buffer[sizeof(buffer)-1]='\0';
, e7 P! u! ^) p4 G0 O8 w" l string s(buffer);! E: @# R/ A z: n E
if(s.size()<2) continue;
2 W( E& c, x Y7 U% I; k' b else if(s.substr(0,1)=="("||s.substr(0,1)=="/") //标志或控制语句
( N I* c: a+ |* _ _/ y' D {
: [7 s9 t9 r' S9 s/ D! {0 y# ~4 |+ T m_nCtrlNum++;
2 }8 \4 N6 y' }2 J. p% `; e# Y if(s.substr(0,5)=="(END)")
/ }; U. Q% h, X1 p) H* ?3 @5 e# f f break;
}3 _+ T5 f- d, k; ~8 N }; n7 v+ _& y& ^2 Q& q
}
$ S9 j; i" n% J! ~# j. Hfin.close();
) H; R! D- y, x9 l6 W; [& I0 h$ w$ Q} |