读书人

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

发布时间: 2012-02-10 21:27:42 作者: rapoo

为什么在读文件后输出有错误
#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;

读书人网 >C++

热点推荐