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

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

ifstream.close() 错误

[复制链接]

该用户从未签到

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

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

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

×
不知大家有没有遇到过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
}
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

该用户从未签到

累计签到: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-3-19 09:34

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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