马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
不知大家有没有遇到过ifstream.close()的错误。我准备写一个统计BPA的dat文件内各卡片数量的程序,dat文件是以“(END)”结尾的文本文件。) Y; T7 {* F' ~9 r% h, N
当(END)出现在dat文件最后一行时,程序正常,但若(END)后有一个空行,执行到fin.close()这一步会出现错误,太莫名其妙了。敬请各位高手指教。, Y4 M) Y0 E5 }( d
7 N1 m- q! | g
void KBPAClass::CountList() //统计各类卡片的数量
) T! l" g: R- k! \4 T- D1 r{ ( D3 J: K- f& ] b7 q/ L
if(m_strDatInFile=="") //检查DAT文件路径是否为空
d1 \ [% a3 C1 e8 U9 t5 _ {/ ?0 F) C* j% z z
cout<<"\n数据不完整,缺少DAT文件输入路径!";
6 l }6 J+ ^8 s$ `( ^3 e exit(0);
/ l% m' ]( |$ U0 B }6 c' `- T+ ?, L; t; D. s
ifstream fin(m_strDatInFile.c_str());# m' `: V& j; n @& ?3 r
if(!fin)
6 @% w `- |+ ?4 Y/ t& t3 H {
; A7 Q7 c6 _. B% f$ O3 w! [ cout<<"\n不能打开DAT输入文件,程序退出"<<endl;
! r1 y3 A/ x% Y6 M: C" A exit(0);
( @# d8 k5 Q$ S" N6 ^ }
2 e) v {1 _# }7 y* y0 ~; v9 R char buffer[240]; //因为卡片有效位数为80(某些卡可能到90),但考虑到可能有空格,多设置一些 }; X9 s) y l, g3 Y: n: z
while(int(fin.tellg())!=-1), K' A& j9 h8 \5 o
{1 q! _7 _$ A4 A* A1 n
for(int i=0;i<sizeof(buffer);i++)# v: ]) X9 t8 ^, Q! O0 O
{" a, r5 @7 Y$ m8 B% K/ M
fin.get(buffer[i]);
1 l! s/ x* t G) z+ t if(buffer[i]=='\n'||fin.eof()) ' G2 A4 s* j; T/ b: k8 v
{
: D, Y7 J" y0 P( [" K2 G buffer[i]='\0';! ~* s( I9 S1 X% B) g
break;
: W* j* G$ \4 g7 H' Q, y* X3 L) F }4 |4 U# l8 T: D4 b$ i$ F
}
. Z- j' h: h5 C/ |$ W9 [$ S: \ buffer[sizeof(buffer)-1]='\0';
# l6 H/ U7 g5 m string s(buffer);/ a3 v7 b- b: m3 [* `; [2 k1 F: h2 t
if(s.size()<2) continue;
& {" m; V: ^9 {& G8 D4 {; p) S else if(s.substr(0,1)=="("||s.substr(0,1)=="/") //标志或控制语句) D# F8 l# C8 m
{
0 l. f! J# d3 a8 B m_nCtrlNum++;
/ W) S* \6 M5 @" B; |8 U2 T if(s.substr(0,5)=="(END)")
8 s' Y5 s- K8 z( \ break;
$ j- X9 \( L0 r, T& k' } }2 \4 T$ t( n4 c' U- o: k0 I
}
( i( h4 v7 ^" L* M( B; Vfin.close();# ]' R9 e% q9 E: n
} |