C语言fread函数读取文件问题

我的原程序如下:#include<stdio.h>#include<math.h>structhj{chardianh[10];longintx;longinty;cha... 我的原程序如下:
#include<stdio.h>
#include<math.h>
struct hj
{
char dianh[10];
long int x;
long int y;
char gaoc[10];
}

main()
{
int i;
struct hj d[10];
FILE *fp;

fp=fopen("123.txt","r+");

for(i=0;i<4;i++)
{
d[i].x=0;
d[i].y=0;
fread(&d[i],20,1,fp);
printf("%s %d %d %s\n",d[i].dianh,d[i].x,d[i].y,d[i].gaoc);
printf("ok");
}
fclose(fp);
}
运行的结果不是我想要的结果,总出现一些乱码。我怀疑是文件的问题。
我文件是用excel另存为文本制表符格式的,求教各位高手,如果真是文件问题又应该怎么转换文件呢?
我用fread(&d[i],sizeof(struct hj),1,fp);也是一样的。
我的文件了内容格式为
1-21 2856591 15733334 522 m
2-23 2856564 15732844 521 m
数据读出来是乱码。
展开
 我来答
yr78044367
推荐于2018-05-10 · TA获得超过534个赞
知道小有建树答主
回答量:397
采纳率:100%
帮助的人:91.1万
展开全部
fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
函数原型
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
参 数
buffer
用于接收数据的内存地址
size
要读的每个数据项的字节数,单位是字节
count
要读count个数据项,每个数据项size个字节.
stream
输入流
返回值
实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。
buaaeeww
推荐于2017-11-23 · TA获得超过683个赞
知道答主
回答量:154
采纳率:0%
帮助的人:232万
展开全部
你写入文本文件后,数据是用ASCII码串的形式来表示,已经不是二进制数据了,因此需要用fscanf函数来读取,试试如下程序:
#include<stdio.h>
#include<math.h>
struct hj
{
char dianh[10];
long int x;
long int y;
char gaoc[10];
}

main()
{
int i;
struct hj d[10];
FILE *fp;

char s1[10];

fp=fopen("123.txt","r+");

for(i=0;i<2;i++)
{
fscanf(fp,"%s\t%d\t%d\t%s %s",&d[i].dianh,&d[i].x,&d[i].y,&d[i].gaoc,&s1);
strcat(d[i].gaoc,s1);
}

fclose(fp);
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
半季流年
2010-12-16 · TA获得超过1533个赞
知道小有建树答主
回答量:616
采纳率:0%
帮助的人:766万
展开全部
fread是用二进制方式读取二进制文件,读取的数据必须是用对应的fwrite写入的,而你读取的是文本格式的文件当然就不行了!
你可以试试用fscanf读取。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
63278146
2010-12-16 · TA获得超过204个赞
知道小有建树答主
回答量:504
采纳率:100%
帮助的人:192万
展开全部
读取字节出错了 应该是28字节 而不是20 最好用siezof(struct hj)
不要你手动输入数据 最好用程序将数据整块写入文本中 要吗你就用fscanf 和fsprintf对应着来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ddff2dda3
2010-12-16 · TA获得超过1299个赞
知道答主
回答量:53
采纳率:0%
帮助的人:27万
展开全部
fread(&d[i],20,1,fp);这句不是读的
比如 freed(p,20,1,fp) p是一个已经分配的空间的指针 fread(d[j].dianh,10,1,lp);
freed(d[j].gaoc,10,1,lp);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式