C语言文件打开之后乱码

#define SIZE 2
struct worker
{char name[10];
int ID;
int basepay;
int jobpay;
int allowance;
int medicare;
int fund;
}work[SIZE];
............
void input()//写入职工数据
{ FILE *fp;
int i;
if((fp=fopen("work.txt","w"))==NULL)//wb只写
{
printf("无法打开此文件\n");
}
for(i=0;i<SIZE;i++)
if(fwrite(&work[i],sizeof(struct worker),1,fp)!=1)
printf("文件写入错误\n");
fclose(fp);
}

写入字符可以,但是数字是乱码的,求大神指正,将fwrite改为fprintf也不行,急急急~~!~!~!

数字当然是乱的了
因为写入的是二进制数据
比如字符a的ascii编码为97那么你存储在文件里的是97
打开时二进制数据97就是a的ascii编码所以显示为a
如果你写入的是数字1,1在ascii上没有对应的可显示字符
自然就无法进行显示了
而你想要显示的数字类似1其ascii值为49,所以你看到的文件是显示的1其二进制存储的数据其实是49追问

知道是二进制,怎么改呀大神,,,

追答

你要意思是要写入成可见的ascii形式的数字吗

那么写入的时候需要将数字进行转换

也就是将int转换成char *

结构体内所有的int数据都需要转换

可以使用sprintf进行简单的转换

比如

#include <stdio.h>

int main(int argc,char **argv)
{
    int a=12345;
    char buf[10];

    sprintf(buf,"%d",a);
    printf("%s\n",buf);

    return 0;
}

这样写入文件时写入转换后的数据就可以正常显示了

不过如果你要这样做的话下次读取的时候还是再转换回来

不然读取回来的就是字符串而不是数字了

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-12-23

解压文件出现中文乱码怎么办解决办法

华为Mate50 Pro曲面旗舰手机

¥6799

苹果 AirPods Pro 2代

¥1699

索尼65英寸4K HDR专业游戏电视

¥7499

惠普战66五代15.6英寸轻薄本

¥4399

第2个回答  2016-01-07
数学不用int
相似回答