当将%d全部修改为%s时候,屏幕输出乱码?
#include<stdio.h>
#include<stdlib.h>
#define N 10
typedef struct a
{
int num;
int n;
int nu;
char numnum[20];
}a;
int main()
{
a a;
FILE *fp;
if((fp=fopen("D:\\aaa.txt","r"))==NULL)
{
printf("can not open file.\n");
exit(0);
}
fscanf(fp,"%d%d%d%s",&a.num,&a.n,&a.nu,a.numnum);
printf("%d %d %d %s",a.num,a.n,a.nu,a.numnum);
getchar();
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define N 100
typedef struct a
{
char n[N];
char nu[N];
char num[N];
char numnum[N];
}a;
int main()
{
a a;
FILE *fp;
if((fp=fopen("D:\\aaa.txt","r"))==NULL)
{
printf("can not open file.\n");
exit(0);
}
fscanf(fp,"%s%s%s%s",a.num,a.n,a.nu,a.numnum);
printf("%s %s %s %s",a.num,a.n,a.nu,a.numnum);
fclose(fp);
getchar();
return 0;
}
最有可能的原因是编码不匹配,比如你的文件是GBK保存的,但代码默认locale和charset是UTF-8,就会出现乱码。不同平台上的转码方案非常不同,建议先了解locale和字符集后再尝试用代码解决问题。
编码问题解决起来非常复杂,所以其实很多老师都会告诉初学者:先不要尝试用代码处理半角英文和数字等常用字符以外的字符和字符串。
(同一语言有很多编码方案,而且有的是变长多字节编码方案,有的是宽字节方案,Windows和Linux的API也长得完全不同。英文半角字符串由于是ASCII编码,兼容性很高,初学者遇到不兼容的概率又很小,可以说是唯一不会在初学者中出现编码问题的语言。这个展开来说的话都能写篇几万字的文章了。)
已解决,链接↓