设为首页收藏本站|繁體中文 快速切换版块

 找回密码
 立即加入
搜索
查看: 3056|回复: 2

ifstream.close() 错误

[复制链接]

该用户从未签到

累计签到:1 天
连续签到:1 天
发表于 2011-5-28 15:16:55 | 显示全部楼层 |阅读模式

马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!

您需要 登录 才可以下载或查看,没有账号?立即加入

×
不知大家有没有遇到过ifstream.close()的错误。我准备写一个统计BPA的dat文件内各卡片数量的程序,dat文件是以“(END)”结尾的文本文件。
9 W' b, B( k; A& A5 a0 F当(END)出现在dat文件最后一行时,程序正常,但若(END)后有一个空行,执行到fin.close()这一步会出现错误,太莫名其妙了。敬请各位高手指教。5 `! B: a# B2 t
: a0 ]2 L# N4 s. s  R' t
void        KBPAClass::CountList()                //统计各类卡片的数量                ; M$ o3 e" b; l- J0 S# U' m
{       
+ {' ?. R$ X  d$ U2 a1 K        if(m_strDatInFile=="")                                //检查DAT文件路径是否为空
/ u+ v. n" ]  t. X# }3 v    {4 K, s: o( |! _
        cout<<"\n数据不完整,缺少DAT文件输入路径!";9 z$ `4 D! \( q, x
        exit(0);
6 }& b: X+ \; Z; r% f7 Y* O    }: b2 h& R/ o" U6 |; `
        ifstream fin(m_strDatInFile.c_str());
, y2 Q5 p2 k, @9 x1 F" {        if(!fin)8 s; Y- e3 c( _5 J- ~/ ^  o# C5 R
        {          k6 f) q3 J# Z( @
                cout<<"\n不能打开DAT输入文件,程序退出"<<endl;* P8 P+ Q) S* U6 F
                exit(0);. U9 [3 F, n$ B8 _
        }7 G* e: V; M' j( Y) G
        char buffer[240];                                //因为卡片有效位数为80(某些卡可能到90),但考虑到可能有空格,多设置一些1 G/ R" t1 B0 y( d" ]0 V/ D
        while(int(fin.tellg())!=-1)
$ Y+ B* c. L( D! u* M- c+ T! l: I8 i    {
. }5 K  Z1 Q$ o9 R7 d                for(int i=0;i<sizeof(buffer);i++)0 r/ o) j% m5 O' n# y4 a
                {* m' `% Y1 J; ^- }) o8 ?
                        fin.get(buffer[i]);/ f7 u8 G8 g% A3 ]% ?- u
                        if(buffer[i]=='\n'||fin.eof())
/ U% x; S& @+ N0 V4 ^                        {
$ J! O% a. T% A& G                                buffer[i]='\0';
* ~3 p) _# ?( s2 \1 z: Y* l$ i                                break;
0 D7 u* _! D! Y5 q                        }
8 u. l% n* I' N2 L/ o                }" g. V# i6 }' s$ x5 Q! e. n% S
                buffer[sizeof(buffer)-1]='\0';
& R; Q1 h8 ]7 ?( Q# h. c: ~0 g                string s(buffer);
' e. {9 T0 s6 @. {  W                if(s.size()<2) continue;. o/ v% g( j. G* a
                else if(s.substr(0,1)=="("||s.substr(0,1)=="/")                                //标志或控制语句
% D$ E8 }1 L) C, u  i" e" ?: [                {- ~2 E, u3 y9 _3 V7 q; y9 \
                        m_nCtrlNum++;
% I' C) b$ R( d9 E! B: s* R, J                        if(s.substr(0,5)=="(END)") 0 y# d$ Q8 {  w
                                break;
3 T* a3 X7 Z6 w& `; V& e+ I                }, T% h  z  N. E# K
}: G/ i, _# i# E" V+ k8 N1 j
fin.close();  @" l0 x/ U+ y( e5 k
}
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

该用户从未签到

累计签到:1 天
连续签到:1 天
 楼主| 发表于 2011-5-28 15:38:58 | 显示全部楼层
不好意思,看来是我在其他模块中的问题。问题不在fin.close()上,不知道怎么删贴,结了吧。
"真诚赞赏,手留余香"
还没有人打赏,支持一下
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

该用户从未签到

尚未签到

发表于 2012-5-6 22:03:31 | 显示全部楼层
"真诚赞赏,手留余香"
还没有人打赏,支持一下
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

招聘斑竹

小黑屋|手机版|APP下载(beta)|Archiver|电力研学网 ( 赣ICP备12000811号-1|赣公网安备36040302000210号 )|网站地图

GMT+8, 2026-10-9 23:50

Powered by Discuz! X3.5 Licensed

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表