fwrite写入乱码(c语言 用fwrite写入txt的文件,为什么是一堆乱码呢 ,下面是我的程序)

:暂无数据 2026-07-07 07:20:01 :0

fwrite写入乱码(c语言 用fwrite写入txt的文件,为什么是一堆乱码呢 ,下面是我的程序)

大家好,fwrite写入乱码相信很多的网友都不是很明白,包括c语言 用fwrite写入txt的文件,为什么是一堆乱码呢 ,下面是我的程序也是一样,不过没有关系,接下来就来为大家分享关于fwrite写入乱码和c语言 用fwrite写入txt的文件,为什么是一堆乱码呢 ,下面是我的程序的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

c语言 用fwrite写入txt的文件,为什么是一堆乱码呢 ,下面是我的程序

这个函数以二进制形式对文件进行操作
按数据定义结构的写入保持数据结构的长度,对于数值类型,再用文本方式打开时表现为
乱码。例如float
a=12345.67,写入文件后为4个字节,打开后不是文本表示的8个字节。

C 语言,文件操作将结构体数组用fwrite写入文件后,打开时为什么文件中会是一堆乱码

注意你的写入语句:

 fwrite(&s[i],sizeof(stu),1,fp);

你这样是以二进制的形式将stu结构写入文件的。

typedef struct
{
char name;
int score[M];
double avg;
}stu;

应该用fprintf函数分三次完成一个记录的输出:

fprintf(fp,“%s\t“, s[i].name);
int j; //在前面补充定义
for(j=0;j 《 M;j++) fprintf(fp,“%d\t“, s[i].score[j]);
fprintf(fp,“%f\n“, s[i].avg);

 对应的fread也要修改。我改好了传上来。


#include《stdio.h》
#include《string.h》
#include《stdlib.h》
#define N 20
#define M 3
typedef struct
{
char name;
int score[M];
double avg;
}stu;
void swap(stu*m,stu*n)
{
stu t=*m;
*m=*n;
*n=t;
}
void input(stu*s,int n)
{
int i,j;
double sum=0;
for(i=0;i《n;i++)
{
printf(“请输入姓名:“);
scanf(“%s“,s[i].name);
printf(“请输入分数(英语数C):“);
for(j=0;j《M;j++)
scanf(“%d“,&s[i].score[j]);
printf(“\n“);
}
}
void sort(stu*s,int n)
{
int i,j;
double sum=0;
for(i=0;i《n;i++)
{
for(j=0;j《M;j++)
sum+=s[i].score[j];
s[i].avg=sum/M;
sum=0;
}
for(i=1;i《n;i++)
for(j=0;j《n-i;j++)
{
if(s[j].avg《s[j+1].avg)
swap(&s[j],&s[j+1]);
else if((s[j].avg==s[j+1].avg)&&(strcmp(s[j].name,s[j+1].name)《0))
swap(&s[j],&s[j+1]);
}
}
void save(stu*s,int n)
{
FILE*fp;
int i, j;
fp=fopen(“d:\\data.dat“,“w“);
for(i=0;i《n;i++)
{
//fwrite(&s[i],sizeof(stu),1,fp);
fprintf(fp,“%s\t“, s[i].name);
for(j=0;j 《 M;j++) fprintf(fp,“%d\t“, s[i].score[j]);
fprintf(fp,“%f\n“, s[i].avg);
}
fclose(fp);
}
void output(stu*s,int n)
{
int i=0,j;
FILE*fp;
if((fp=fopen(“d:\\data.dat“,“r“))==NULL)
{
printf(“fail\n“);
exit(0);
}
while(!feof(fp))
{
//fread(&s[i],sizeof(stu),1,fp);
fscanf(fp, “%s“,s[i].name);
for(j=0;j《M; j++) fscanf(fp,“%d“, &s[i].score[j]);
fscanf(fp, “%f“,&s[i].avg);
i++;
}
fclose(fp);
for(i=0;i《n;i++)
{
printf(“%s\t“,s[i].name);
for(j=0;j《M;j++)
printf(“%d   “,s[i].score[j]);
printf(“%.1lf“,s[i].avg);
printf(“\n“);
}
}
void main()
{
int n;
stu s[N];
printf(“input n:“);
scanf(“%d“,&n);
input(s,n);
sort(s,n);
save(s,n);
output(s,n);
}

fwrite保存数据,文本打开变乱码

因为写入文件的是二进制数据,所以看上去就是乱码。
#include《stdio.h》
#include《stdlib.h》
#include《time.h》
#define N 10000
int main()
{
int a[N];int i,j,m;
FILE*fw,*fr;
srand((unsigned)time(NULL));
for(i=0;i《1000;i++)
{
a[i]=rand()%1000+1;
} //产生随机数组
fw=fopen(“f:\\intfile.dat“,“wb“);//以二进制方式打开,因为你后面是用二进制方式读的,否则会乱码
if(fw==NULL)
{
printf(“ERROR!“);
exit(0);
}
for(i=0;i《1000;i++)
{
fprintf(fw,“%8d“,a[i]);
} //将随机数组导入文件中
fclose(fw);
fr=fopen(“f:\\intfile.dat“,“rb“);//同理,看上面
while(!feof(fr))
{
fscanf(fr,“%8d“,&j);
printf(“%8d“,j);
}
fclose(fr);
fw=fopen(“f:\\intfile.dat“,“a+b“);//b是binary的意思,要统一
if(fw==NULL)
{
printf(“ERROR!!!“);
exit(0);
}
fwrite(a,sizeof(int),1000,fw);
fclose(fw);
fr=fopen(“f:\\intfile.dat“,“rb“);
fseek(fr,32L,SEEK_SET);
fscanf(fr,“%8d“,&j);
printf(“%8d“,j);
fseek(fr,72L,SEEK_SET);
fscanf(fr,“%8d“,&j);
printf(“%8d“,j);
fseek(fr,-40L,SEEK_END);
fscanf(fr,“%8d“,&j);
printf(“%8d“,j);
fseek(fr,-80L,SEEK_END);
fscanf(fr,“%8d“,&j);
printf(“%8d“,j);
fclose(fr);
return 0;
}

为什么结构体里面的int型变量用fwrite写入文件时显示乱码

乱码才是对的。
你用的是二进制形式打开的文件,int类型占用4字节,你的代码就是把这4字节写入了文件。
相当于就是说你的int比如是0x12345678,写入文件的内容会是 78 56 34 12 (注意,我说的是十六进制码),它不是可读的字符串。你需要的是将int转换为字符串再写入。

关于本次fwrite写入乱码和c语言 用fwrite写入txt的文件,为什么是一堆乱码呢 ,下面是我的程序的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

fwrite写入乱码(c语言 用fwrite写入txt的文件,为什么是一堆乱码呢 ,下面是我的程序)

本文编辑:admin

更多文章:


协方差计算公式(协方差的计算公式)

协方差计算公式(协方差的计算公式)

这篇文章给大家聊聊关于协方差计算公式,以及协方差的计算公式对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 08:10

易语言网页api接口怎么调用(易语言,怎么读取网页json的api)

易语言网页api接口怎么调用(易语言,怎么读取网页json的api)

本篇文章给大家谈谈易语言网页api接口怎么调用,以及易语言,怎么读取网页json的api对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月11日 08:00

majority of(the majority of 和 a majority of的区别以及用法例句)

majority of(the majority of 和 a majority of的区别以及用法例句)

这篇文章给大家聊聊关于majority of,以及the majority of 和 a majority of的区别以及用法例句对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 07:40

汉字机内码查询表(1个汉字的机内码是几位谢谢)

汉字机内码查询表(1个汉字的机内码是几位谢谢)

大家好,关于汉字机内码查询表很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于1个汉字的机内码是几位谢谢的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 07:20

promote翻译(英语翻译倡导怎么说)

promote翻译(英语翻译倡导怎么说)

其实promote翻译的问题并不复杂,但是又很多的朋友都不太了解英语翻译倡导怎么说,因此呢,今天小编就来为大家分享promote翻译的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 06:30

用手机如何导航?开车用手机导航哪个软件最好

用手机如何导航?开车用手机导航哪个软件最好

今天给各位分享用手机如何导航的知识,其中也会对用手机如何导航进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 06:20

多线程技术有什么用(多线程有什么作用)

多线程技术有什么用(多线程有什么作用)

其实多线程技术有什么用的问题并不复杂,但是又很多的朋友都不太了解多线程有什么作用,因此呢,今天小编就来为大家分享多线程技术有什么用的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 05:40

another time(another time和other time的区别)

another time(another time和other time的区别)

大家好,another time相信很多的网友都不是很明白,包括another time和other time的区别也是一样,不过没有关系,接下来就来为大家分享关于another time和another time和other time的区

2026年10月11日 05:00

java开发工具包jdk(JDK是什么意思)

java开发工具包jdk(JDK是什么意思)

其实java开发工具包jdk的问题并不复杂,但是又很多的朋友都不太了解JDK是什么意思,因此呢,今天小编就来为大家分享java开发工具包jdk的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 04:50

mysql 命令(MySQL的基本命令)

mysql 命令(MySQL的基本命令)

大家好,如果您还对mysql 命令不太了解,没有关系,今天就由本站为大家分享mysql 命令的知识,包括MySQL的基本命令的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 03:00

最近更新

majority of(the majority of 和 a majority of的区别以及用法例句)
2026-10-11 07:40:02 浏览:0
热门文章

标签列表