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 输出在文件上的又是另外的乱码,
windows下,编码问题也有可能
VC++6.0以上不存在这种可能
GCC编译器,输入/出默认UTF-8,所以在windows下有问题,添加-finput-charset=GBK -fexec-charset=GBK
也有可能是输出文件编码问题,就是windows的记事本,不支持输出的文件的编码(MAC居多),你换一个编辑器看看,比如UltraEdit。这个是很正常的,比如你在文件里输出一个换行符时,用记事本打开输出文件,则发现变成空格了,实际是记事本读不了
fprintf(fp,"%d %d %s\n",st[i].id,st[i].num,st[i].name);
为什么要这样改,应该不是这里错了吧
追答#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);
}