马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
不知大家有没有遇到过ifstream.close()的错误。我准备写一个统计BPA的dat文件内各卡片数量的程序,dat文件是以“(END)”结尾的文本文件。6 G! G* q `0 h! W) N2 A! @
当(END)出现在dat文件最后一行时,程序正常,但若(END)后有一个空行,执行到fin.close()这一步会出现错误,太莫名其妙了。敬请各位高手指教。. H2 b, v( ~! Y4 g3 F
' e* S8 ]* \8 B3 y$ nvoid KBPAClass::CountList() //统计各类卡片的数量
4 @1 \$ ~( {% S. Z/ ^{ $ Z/ {2 _: x3 H& E0 x4 v
if(m_strDatInFile=="") //检查DAT文件路径是否为空/ o" K" B. o+ Q0 Y/ r0 H
{. l6 p& I! y5 d- i/ n5 \ W6 N
cout<<"\n数据不完整,缺少DAT文件输入路径!";
7 D7 J+ |3 F9 v# @- T exit(0);8 ?6 F# N3 Y N% R0 F
} B! c% }. h+ M: Z* @9 o7 |: \
ifstream fin(m_strDatInFile.c_str());( w/ x9 w# o8 ~1 b; l
if(!fin)4 b5 p2 ]: Y* [8 y' l! n* Q
{ 9 o7 k! I( ~- J6 Z
cout<<"\n不能打开DAT输入文件,程序退出"<<endl;
# ?: x+ I5 ^( B* k$ { exit(0);
2 x7 N( c& P% @0 E# H# y2 n' D }
. U$ [* }+ ?) {4 ]% x+ y) A. w, a+ b char buffer[240]; //因为卡片有效位数为80(某些卡可能到90),但考虑到可能有空格,多设置一些
: h/ D( `$ j% Q; \9 d while(int(fin.tellg())!=-1)
+ l/ L, G- q" L1 I5 x0 K, X {8 x* R5 m9 p T
for(int i=0;i<sizeof(buffer);i++)
3 q/ D8 B! F( g$ F0 C {
h9 G0 E: L. [2 F! b fin.get(buffer[i]);6 g, ^5 y/ u- U P1 H
if(buffer[i]=='\n'||fin.eof())
! b8 b4 y/ i; w {
Z" B- T- a5 A1 ^6 c8 u1 z/ ? buffer[i]='\0';
5 O7 Z$ d( `9 F0 h# Z2 Y, i$ r break;$ ]/ w. e* ^4 R& \+ o
}
! P% y4 c( B" O. y }
- Z, R8 N# n$ @: V- Z; X5 { buffer[sizeof(buffer)-1]='\0';
, g9 t- H& E1 T; L- i/ ^8 O8 c& y% A string s(buffer);
4 @# L4 s; Y+ c/ d' M6 k- z if(s.size()<2) continue;
3 g6 J, {, n5 ~0 Z! s else if(s.substr(0,1)=="("||s.substr(0,1)=="/") //标志或控制语句
( X2 @% }& K0 q( ~ {
9 @2 ^/ h2 }. f5 E" c2 `2 I' k m_nCtrlNum++;/ x" l* i' o" D
if(s.substr(0,5)=="(END)") - r k% e, Z+ a2 O' |1 F
break;
( E e4 F" |8 G, M }, Q$ B; k' ]* H, j: H: J
}
/ R& i! X9 U C, `4 L8 {fin.close(); \: i4 }9 I% w/ p' c$ n
} |