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 输出在文件上的又是另外的乱码, 展开
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 输出在文件上的又是另外的乱码, 展开
展开全部
windows下,编码问题也有可能
VC++6.0以上不存在这种可能
GCC编译器,输入/出默认UTF-8,所以在windows下有问题,添加-finput-charset=GBK -fexec-charset=GBK
也有可能是输出文件编码问题,就是windows的记事本,不支持输出的文件的编码(MAC居多),你换一个编辑器看看,比如UltraEdit。这个是很正常的,比如你在文件里输出一个换行符时,用记事本打开输出文件,则发现变成空格了,实际是记事本读不了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把fwrite改成fprintf试试。
fprintf(fp,"%d %d %s\n",st[i].id,st[i].num,st[i].name);
fprintf(fp,"%d %d %s\n",st[i].id,st[i].num,st[i].name);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你把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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询