#include<stdio.h>
#include<stdlib.h>
struct st
{
char name[4];
char age[3];
char tel[9];
}s[3];
void main()
{
int i,n;
FILE *fpe; FILE *fpo;
for(i=0;i<3;i++)
{
scanf_s("%s",s[i].name,4);getchar();
scanf_s("%s",s[i].age,3);getchar();
scanf_s("%s",s[i].tel,9);getchar();
}
fopen_s(&fpo,"e:\\students.txt","w");
if(fpo==NULL)
{
printf("打不开\n");
exit(0);
}
for(i=0;i<3;i++)
{
n=fwrite(&s[i],sizeof(struct st),1,fpo);
if(n!=1)
printf("file write error");
}
fclose(fpo);
fopen_s(&fpe,"e:\\students.txt","r");
if(fpe==NULL)
{
printf("打不开\n");
exit(0);
}
for(i=0;i<3;i++)
{
n=fread(&s[i],sizeof(struct st),1,fpe);
if(n!=1)
printf("file read error");
printf("%-4s%3s%9s\n",s[i].name,s[i].age,s[i].tel);
}
fclose(fpe);
system("pause");
}
确实是一个奇怪的问题,只增加一个变量就一切 OK 的话,这明显与我们猜的字符串编码无关!
建议你将输入在写入文件前,先输出确认一下:主要的目的是看看有没有什么越界、或者其它可能的情况出现。
之前回答你了,因为windows xp的记事本没有办法直接识别编码——但是情况比较复杂的是,它在没有unicode编码头的文件上会实现猜测编码,根据文本的内容,这种猜测有时候会出问题。
以前网上流传一个段子,说的是记事本输入联通,保存,出来的是乱码,其实就是这个原理。
与Windows记事本的编码方式有关,如果使用UE打开,则截图如下:,写入的数据没有问题,只是显示失败罢了