| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 979 人关注过本帖
标题:[讨论]错在哪里?急死人了!
只看楼主 加入收藏
xiehongyou
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2004-8-29
收藏
 问题点数:0 回复次数:7 
[讨论]错在哪里?急死人了!

/*,把保存在C:\phone.dat这个文件全部读出并显示在出来。这个程序错在那里?*/ #include "stdio.h" struct phone /*定义结构型变量*/ {char name; long num; } pho[5];

void readw()/*定义读文件的函数*/ { FILE *fp; int i; if((fp=fopen("c:\phone123.dat","rb"))==NULL) {printf("cannot open file2!\n"); return; } for(i=0;i<5;i++) if(fread(&pho[i],sizeof(struct phone),1,fp)!=1) printf("file read error!\n");

} main()/*主函数*/ {int i=0; readw();/*调用函数*/ for(i=0;i<5;i++) printf("%s%4ld\n",pho[i].name,&pho[i].num);/*边读边输出*/

getch(); }

搜索更多相关主题的帖子: phone 函数 定义 int 
2004-12-04 22:33
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

struct phone /*定义结构型变量*/ {char name;

只定义了一个字节,如果你的文件中的name超过一个字节,你想想会出现什么情况?


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-12-04 22:44
xiehongyou
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2004-8-29
收藏
得分:0 

这个程序我按版主的指点改了,但还是会出现“file read error"只能显示部分的数据还有乱码!

/*,把保存在C:\phone123.dat这个文件全部读出并显示在出来。这个程序错在那里?*/ #include "stdio.h" struct phone /*定义结构型变量*/ {char name[10]; long int num; } pho[5];

void readw()/*定义读文件的函数*/ { FILE *fp; int i; if((fp=fopen("c:\phone123.dat","rb"))==NULL) {printf("cannot open file2!\n"); return; } for(i=0;i<5;i++) if(fread(&pho[i],sizeof(struct phone),1,fp)!=1) printf("file read error!\n");

} main()/*主函数*/ {int h=0; readw();/*调用函数*/ for(h=0;h<5;h++) printf("%s%ld\n",pho[h].name,pho[h].num);/*边读边输出*/

getch(); }

2004-12-05 10:09
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

问题出在读写的地方!!就是sizeof(struct phone)这个是12个字节!*32位系统中*

fread(&pho[i],sizeof(struct phone),1,fp)每次会从文件中读入12个字节,但是实际上你的数据文件中的name并不是每次都是10个字节的!比如果zhanshan就只有8个字节呵呵!所以当你运行的时候肯定会在最后一个出错!

而且你前面的肯定也是错误的。除非你的文件中的文件严格按照你的struct phone的格式来存储数据!


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-12-05 10:49
xiehongyou
Rank: 1
等 级:新手上路
帖 子:84
专家分:0
注 册:2004-8-29
收藏
得分:0 
谢谢版主这般耐心的回答,十分感谢!我前面的文件是按struct phone的格式来存储数据的。请问可以怎样改?
2004-12-05 19:06
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

if((fp=fopen("c:\phone123.dat","rb"))==NULL)===>

if((fp=fopen("c:\\phone123.dat","rb"))==NULL)


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-12-06 22:42
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
这个你可以使用文本方式的数据写入和读去来完成这个!

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-12-07 00:15
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

/*,把保存在C:\phone123.dat这个文件全部读出并显示在出来。这个程序错在那里?*/ #include "stdio.h"

struct phone /*定义结构型变量*/ { char name[10]; long int num; } pho[5]; void input() { int i; for(i=0;i<5;i++) { printf("Input the %d information!\n",i+1); scanf("%s%ld",pho[i].name,&pho[i].num); flushall(); } } void writew() { FILE *fpOut; int i; if((fpOut=fopen("c:\\phone123.dat","wb"))==NULL) { printf("Create Faile.\n"); return; } for(i=0;i<5;i++) if(fwrite(&pho[i],sizeof(struct phone),1,fpOut)!=1) printf("File Write Failed!\n"); fclose(fpOut); }

void readw()/*定义读文件的函数*/ { FILE *fp; int i; if((fp=fopen("c:\\phone123.dat","rb"))==NULL) { printf("cannot open file2!\n"); return; } for(i=0;i<5;i++) if(fread(&pho[i],sizeof(struct phone),1,fp)!=1) printf("file read error!\n"); fclose(fp); }

void main()/*主函数*/ { int h=0; input(); writew(); readw();/*调用函数*/ for(h=0;h<5;h++) printf("%-10s%-10ld\n",pho[h].name,pho[h].num);/*边读边输出*/ //getch(); }


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-12-07 00:33
快速回复:[讨论]错在哪里?急死人了!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015819 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved