|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
不知大家有没有遇到过ifstream.close()的错误。我准备写一个统计BPA的dat文件内各卡片数量的程序,dat文件是以“(END)”结尾的文本文件。/ P8 _' p1 N; x A( S( m( v1 i/ `) O) Y
当(END)出现在dat文件最后一行时,程序正常,但若(END)后有一个空行,执行到fin.close()这一步会出现错误,太莫名其妙了。敬请各位高手指教。% J) p& K+ u( T1 e" y/ ]) Y
/ m/ i6 j9 z; P% {void KBPAClass::CountList() //统计各类卡片的数量 & f* w) f( n4 Y: {3 q$ u
{ ' g: h* Y0 ?( t$ ~3 t } J
if(m_strDatInFile=="") //检查DAT文件路径是否为空
' x/ b+ \% v$ z. M' w# b' t {4 F1 V. c! y$ H% ?4 [
cout<<"\n数据不完整,缺少DAT文件输入路径!";6 J; `$ t; }* [' x5 [, X3 I
exit(0);
0 s! S4 U- J5 z- y4 R }2 F: s" l, K( G$ t* ~! t; \$ B4 N0 n
ifstream fin(m_strDatInFile.c_str());. J) o8 Y( u' P
if(!fin)3 ]( H1 E( @; w* S
{ * {3 E0 t- p: s0 S i3 w
cout<<"\n不能打开DAT输入文件,程序退出"<<endl;1 V! n. C" N! }# b
exit(0);* i* T0 H4 F) ]6 Y
}
% E* R5 A8 O# T* a3 @: K0 y char buffer[240]; //因为卡片有效位数为80(某些卡可能到90),但考虑到可能有空格,多设置一些
" F; J3 ?( I, |3 ] while(int(fin.tellg())!=-1)9 q% d) Y0 t% s+ V) E& ^. G3 S+ r
{
5 W& Q( n* j! H* G, I C- O for(int i=0;i<sizeof(buffer);i++)( a0 B! F# ?/ ]. K- ^4 x
{. S9 q# A; `) U
fin.get(buffer[i]);
0 A: C7 S# {0 w if(buffer[i]=='\n'||fin.eof())
; E, a5 n) i/ ^ {
. R8 j1 Q; {3 V5 {1 m) t8 X buffer[i]='\0';5 H# a# V( ` K" q* _% |
break;
- L! q+ |: \ U; [6 \4 M }0 ]/ k+ J/ _. ^. \9 v$ ?/ b! e
}
: P1 Q' N V1 k& { buffer[sizeof(buffer)-1]='\0';
3 t. d* c3 L/ W: S- I4 x string s(buffer);
" A* J: t( R. x: ?8 P if(s.size()<2) continue;3 | t+ Z" Q1 ]: H# l8 @' W+ _
else if(s.substr(0,1)=="("||s.substr(0,1)=="/") //标志或控制语句: z, j* Z) h4 P
{. L: I/ |* `5 u, F5 }9 c
m_nCtrlNum++;
/ j8 }9 C4 O9 q+ f! s4 M1 z- | if(s.substr(0,5)=="(END)") ) y' f/ s M/ Q. C6 {/ K/ p! z; ?
break;
" }! a- H, T' N0 j }
7 V' ]1 T, S8 u v( P" Q. d}8 P. Z N7 r- v5 ^1 k
fin.close();0 E/ Z$ o: ?6 e6 b% ?
} |