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

structstudent{intid;intnum;charname[10];}st[3];FILE*fp;inti;if((fp=fopen("G:\\abc.txt... 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 输出在文件上的又是另外的乱码,
展开
 我来答
百度网友ae0563c
推荐于2018-03-28
知道答主
回答量:22
采纳率:0%
帮助的人:12.2万
展开全部

windows下,编码问题也有可能

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

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


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

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2014-11-28 · TA获得超过1134个赞
知道小有建树答主
回答量:742
采纳率:73%
帮助的人:425万
展开全部
把fwrite改成fprintf试试。
fprintf(fp,"%d %d %s\n",st[i].id,st[i].num,st[i].name);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
顾_城丶
2014-11-28 · TA获得超过164个赞
知道答主
回答量:105
采纳率:0%
帮助的人:50.9万
展开全部
你把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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式