马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
不知大家有没有遇到过ifstream.close()的错误。我准备写一个统计BPA的dat文件内各卡片数量的程序,dat文件是以“(END)”结尾的文本文件。3 _$ e7 }& c' q: w
当(END)出现在dat文件最后一行时,程序正常,但若(END)后有一个空行,执行到fin.close()这一步会出现错误,太莫名其妙了。敬请各位高手指教。$ `, z. M$ x Z; _: f" w% a* o# t8 M
: Z1 ?& b' D+ b" O, L7 Fvoid KBPAClass::CountList() //统计各类卡片的数量
. D& m. O$ _" e0 s# ~2 O1 y$ z{
. l- o7 ?# [. L, c( ~ G if(m_strDatInFile=="") //检查DAT文件路径是否为空
{; N8 x8 ?* ?. j& z; H6 Z7 H {1 a* P$ X+ v* B6 T0 @* C
cout<<"\n数据不完整,缺少DAT文件输入路径!";8 X1 P3 m, ?% x
exit(0);( e& j7 N8 m& e" s, _: r
}
" H5 g' E! {: [ ifstream fin(m_strDatInFile.c_str());9 w6 \5 V( P& A n* I+ P
if(!fin)
r5 {. `, v6 V9 r5 E& |: ~ { ( R" k7 ~' V9 q7 _' w% \6 U, J# S5 C$ r
cout<<"\n不能打开DAT输入文件,程序退出"<<endl;, Q' u' B8 C1 f) y. Y8 a
exit(0);
$ U3 m% `/ M/ B: \ }
_# b8 I3 T. T/ m ^ char buffer[240]; //因为卡片有效位数为80(某些卡可能到90),但考虑到可能有空格,多设置一些7 i( A, ?, a, b! X
while(int(fin.tellg())!=-1)
' h/ G- u+ P& ~- s: M {
- q3 V, s& y( e r5 O for(int i=0;i<sizeof(buffer);i++)2 w" ~7 K6 v6 i) C
{
7 F! M( e! c( n$ v3 r& r' l fin.get(buffer[i]);. W7 |) [/ t5 e% ~
if(buffer[i]=='\n'||fin.eof())
! m: k5 ] a9 Z- t8 ` {
% D; @. o2 H5 |) { buffer[i]='\0';
' m. S4 o% W s( K' Z break;: A g' q- |) v! }/ d! }' H
}$ I" S8 [1 A; Q: d1 \/ G! K% _
}5 b, m @8 Z. ^# y/ x3 R8 e' {
buffer[sizeof(buffer)-1]='\0';; h& r! i' M) Q) ]& N# y) E
string s(buffer);9 x* b. P7 O+ E1 y* i
if(s.size()<2) continue;4 Y# U% t# _! s. o1 r4 K) L
else if(s.substr(0,1)=="("||s.substr(0,1)=="/") //标志或控制语句& L# x$ z' B- {/ W1 d
{% s. X# \9 A1 X% d& q2 c
m_nCtrlNum++;
9 @: h2 `$ Y( V6 e! k- N* B# u if(s.substr(0,5)=="(END)")
! d# ~- G4 `$ {5 `% L- g) ] break;
! o) Y) T) H/ }* T) S$ q0 g }
. C0 u: A8 N0 ~8 L}! f" G9 t h& ?5 A8 j+ d6 X
fin.close();
6 o1 y- m6 h Z+ s$ ~; `} |