首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么在读文件后输出有异常

2012-02-10 
为什么在读文件后输出有错误#include fstream.hstructdatetime{intyear/*年*/intmonth/*月*/intday/*

为什么在读文件后输出有错误
#include <fstream.h>
struct   datetime  
{
int   year;   /*   年   */  
int   month;   /*   月   */
int   day;   /*   日   */    
int   hour;   /*   时   */    
int   minute;   /*   分   */    
int   second;   /*   秒   */    
};    
struct   OrgCall
{      
char   sourcePhoneNbr[20];   /*   主叫号码   */    
char   destPhoneNbr[20];       /*   被叫号码   */    
struct   datetime   beginTime;   /*   通话起始时间   */    
struct   datetime   endTime;   /*   通话终止时间   */    
}orgcalllist[10];    


void   loadcallinfo()               //装载话单
{
char   ch;
ifstream   fin( "D:\\orgcalllist.txt ");
if(!fin)
{
cout < < "Cannot   open   the     file.\n ";
}
for(int   i=0;i <10;i++)
{
  fin> > orgcalllist[i].sourcePhoneNbr
> > orgcalllist[i].destPhoneNbr
> > orgcalllist[i].beginTime.year> > ch
> > orgcalllist[i].beginTime.month> > ch
> > orgcalllist[i].beginTime.day> > ch
> > orgcalllist[i].beginTime.hour> > ch
> > orgcalllist[i].beginTime.minute> > ch
> > orgcalllist[i].beginTime.second
> > orgcalllist[i].endTime.year> > ch
> > orgcalllist[i].endTime.month> > ch
> > orgcalllist[i].endTime.day> > ch
> > orgcalllist[i].endTime.hour> > ch
> > orgcalllist[i].endTime.minute> > ch
> > orgcalllist[i].endTime.second;
}
fin.close();
}

void   main()
{
loadcallinfo();
for(int   i=0;i <10;i++)
{
  cout < <orgcalllist[i].sourcePhoneNbr < < "   "
< <orgcalllist[i].destPhoneNbr < < "   "
< <orgcalllist[i].beginTime.year < < ": "
< <orgcalllist[i].beginTime.month < < ": "
< <orgcalllist[i].beginTime.day < < ": "
< <orgcalllist[i].beginTime.hour < < ": "
< <orgcalllist[i].beginTime.minute < < ": "
< <orgcalllist[i].beginTime.second < < "   "
< <orgcalllist[i].endTime.year < < ": "
< <orgcalllist[i].endTime.month < < ": "
< <orgcalllist[i].endTime.day < < ": "
< <orgcalllist[i].endTime.hour < < ": "
< <orgcalllist[i].endTime.minute < < ": "
< <orgcalllist[i].endTime.second < <endl;
}

}

文件内容如下:
83490000   85980000   2007:04:23:02:20:01   2007:04:23:12:21:11
83490000   01085980010   2007:04:23:20:58:30   2007:04:23:21:39:25
83490001   13951645164   2007:04:23:20:58:30   2007:04:23:21:39:25
83490000   85980000   2007/04/23/21/39/25   2007/04/23/18/23/21
876XY321   85981111   2007:04:23:19:11:21   2007:04:23:09:10:39
83470002   55074132   2007:04:23:15:18:19   2007:04:23:15:18:22
83490001   1790902165280115   2007:04:23:20:19:20   2007:04:23:21:08:10


83490002   02086680020   2007:04:23:19:50:30   2007:04:23:21:23:25
83470003   168880088   2007:04:23:19:08:05   2007:04:23:19:10:03
83490002   02086680020   2007:04:23:19:50:30   2007:04:23:21:23:25

[解决办法]
我想楼主可能用的是VC++ 6.0,它输出的结果就会是这样的:
83490000 85980000 2007:4:23:2:20:1 2007:4:23:12:21:11
83490000 01085980010 2007:4:23:20:58:30 2007:4:23:21:39:25
83490001 13951645164 2007:4:23:20:58:30 2007:4:23:21:39:25
83490000 85980000 2007:4:23:21:39:25 2007:4:23:18:23:21
876XY321 85981111 2007:4:23:19:11:21 2007:4:23:0:0:0
0:0:0:0:0:0 0:0:0:0:0:0
0:0:0:0:0:0 0:0:0:0:0:0
0:0:0:0:0:0 0:0:0:0:0:0
0:0:0:0:0:0 0:0:0:0:0:0
0:0:0:0:0:0 0:0:0:0:0:0
Press any key to continue

而用VC++2005则会得到正确的 结果 :83490000 85980000 2007:4:23:2:20:1 2007:4:23:12:21:11
83490000 01085980010 2007:4:23:20:58:30 2007:4:23:21:39:25
83490001 13951645164 2007:4:23:20:58:30 2007:4:23:21:39:25
83490000 85980000 2007:4:23:21:39:25 2007:4:23:18:23:21
876XY321 85981111 2007:4:23:19:11:21 2007:4:23:9:10:39
83470002 55074132 2007:4:23:15:18:19 2007:4:23:15:18:22
83490001 1790902165280115 2007:4:23:20:19:20 2007:4:23:21:8:10
83490002 02086680020 2007:4:23:19:50:30 2007:4:23:21:23:25
83470003 168880088 2007:4:23:19:8:5 2007:4:23:19:10:3
83490002 02086680020 2007:4:23:19:50:30 2007:4:23:21:23:25
请按任意键继续. . .

编译器需要换个了 呵呵



[解决办法]
我用的是VC2005. 跟楼主一样的问题.

我的问题原因找到了: 原来是因为测试文件使用的是Unicode编码. 用wordpad另存为
非Unicode的文本文档后问题解决. 当然可能还有其他方法.

检查你的测试文件是否Unicode编码方法: 用wordpad(写字板)打开文件, 然后点 "文件|另存为 ",
如果在 "保存类型 "框中显示为 "Unicode文本文档 ", 则该文件是Unicode.

楼主可以试一下, 如果不是这个原因.......:(


[解决办法]
那为什么上面改了以后能读呢? 是不是溢出的问题
=====>
不是溢出的问题, 是Unicode编码的问题.

参考文章:
http://dozb.bokee.com/1655050.html
[解决办法]
找到原因了。把#include <fstream.h>
换成
c++标准就好了。如下:
#include <fstream>
#include <iostream>
using namespace std;

热点排行