|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
不知大家有没有遇到过ifstream.close()的错误。我准备写一个统计BPA的dat文件内各卡片数量的程序,dat文件是以“(END)”结尾的文本文件。( g( e2 l6 T6 Q: t. }( z1 D
当(END)出现在dat文件最后一行时,程序正常,但若(END)后有一个空行,执行到fin.close()这一步会出现错误,太莫名其妙了。敬请各位高手指教。
b$ B: }; U% `- r# _" r/ ~) Y6 t' D
void KBPAClass::CountList() //统计各类卡片的数量 ; a! P- C: M& s1 Q0 }- `! q0 T
{ 4 H1 v! f6 z# U7 K; |* e
if(m_strDatInFile=="") //检查DAT文件路径是否为空
) i$ I9 y3 u+ u7 V! w0 Z {
/ w. c9 a2 j; G6 n: o# K cout<<"\n数据不完整,缺少DAT文件输入路径!";- K5 v. D2 v T& K
exit(0);
" S" F: V9 T# y }
: z d j/ q8 k& p( T ifstream fin(m_strDatInFile.c_str());# D7 I! A5 O U c0 c* F3 r
if(!fin)* d' J) Y. L: d" O( M" R* ^
{
1 I$ t3 ? t7 I9 m* I2 [ cout<<"\n不能打开DAT输入文件,程序退出"<<endl;3 p( \& r o* O L9 y ~
exit(0);3 @- B, W8 {8 Q- [' E
}( n' D$ ]! X) D" R% z: M9 \& i
char buffer[240]; //因为卡片有效位数为80(某些卡可能到90),但考虑到可能有空格,多设置一些
) ^' _) @5 N5 L: G Z while(int(fin.tellg())!=-1)% \& \ M$ Q- P; P6 ~8 ^
{3 v: h' o9 s0 @
for(int i=0;i<sizeof(buffer);i++) c! P" C- |1 O
{ E8 J& I$ A. l* _
fin.get(buffer[i]);0 g9 B$ I, k. ?0 y! p4 a
if(buffer[i]=='\n'||fin.eof()) + b3 s5 U+ Q4 u/ `( G1 K, j
{2 j! Q) w Z l
buffer[i]='\0';6 |, R1 Q% n5 D4 N
break;; N8 Y% \% @/ W% a, L/ q1 s% g
}/ y* s8 k# f; E3 [
}
) l: v3 S! e2 j: Y- p# R) ~8 _ buffer[sizeof(buffer)-1]='\0';
" T3 A8 K `% ?+ g2 d3 n string s(buffer);$ I9 c4 f6 U! N. Q `/ R' A
if(s.size()<2) continue;; o7 K; ~* C% a) G; H6 P
else if(s.substr(0,1)=="("||s.substr(0,1)=="/") //标志或控制语句3 R1 o2 t+ b" p+ k* x
{
! {' G3 k% l. c, @ m_nCtrlNum++;
; \; j# U- E* P* d& ` if(s.substr(0,5)=="(END)") / h3 @) J" g' V6 N
break;/ [/ M; r4 R8 u3 H; L% l/ U
}6 q; k( x' U$ \; K5 }) t$ z
} C* h5 o. Q$ g5 U: `7 R6 ~
fin.close();2 A5 r/ V& g6 R8 n" s6 u: [& ?( d
} |
|