c语言关于文件的读写,为什么输出到文件上得到乱码

struct student{
int id;
int num;
char name[10];
}st[3];
FILE *fp;
int i;
if((fp=fopen("G:\\abc.txt","r+"))==NULL){
printf("Error!\n");
exit(0);
}else{
for(i=0;i<3;i++){
scanf("%d%d%s",&st[i].id,&st[i].num,st[i].name);
}
for(i=0;i<3;i++){
fwrite(&st[i],sizeof(struct student),1,fp);
}
}

fclose(fp);
}
但是再运行一段读出代码再输出在运行界面上,就是正常的,这是为什么?

把r+换成了二进制的wb 输出在文件上的又是另外的乱码,

第1个回答  推荐于2018-03-28

windows下,编码问题也有可能

    VC++6.0以上不存在这种可能

    GCC编译器,输入/出默认UTF-8,所以在windows下有问题,添加-finput-charset=GBK -fexec-charset=GBK


也有可能是输出文件编码问题,就是windows的记事本,不支持输出的文件的编码(MAC居多),你换一个编辑器看看,比如UltraEdit。这个是很正常的,比如你在文件里输出一个换行符时,用记事本打开输出文件,则发现变成空格了,实际是记事本读不了

本回答被提问者和网友采纳
第2个回答  2014-11-28
把fwrite改成fprintf试试。
fprintf(fp,"%d %d %s\n",st[i].id,st[i].num,st[i].name);
第3个回答  2014-11-28
你把id num也用char定义试试追问

为什么要这样改,应该不是这里错了吧

追答

#include
#include
#include

struct student
{
char id[10];
char num[10];
char name[10];
}st[3];
int main()
{
FILE *fp;
int i;
if((fp=fopen("F:\\kkk.txt","wb+"))==NULL)
{
printf("Error!\n");
exit(0);
}
else{
for(i=0;i<3;i++){
scanf("%s %s %s",st[i].id,st[i].num,st[i].name);
}
for(i=0;i<3;i++){
fwrite(&st[i],sizeof(struct student),1,fp);
}
}

fclose(fp);
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网