问题描述
- C语言中memset()如何用?下面的程序运行时为什么在文件中显示的age信息都是乱码?
- C语言中memset()如何用?下面的程序运行时为什么在文件中显示的age信息都是乱码? 如何改正?
#include
#include
#define N 3
void main()
{
typedef struct student
{
char id[6];
char name[8];
int age;
}STU;
FILE *fp;
STU stu1[N]stu2[N];
if((fp=fopen(""d:student.txt""wb""))==NULL)
{
printf(""cannot open this filen"");
exit(0);
}
for(int i=0;i<N;i++)
{ memset(&stu1[i] 0 sizeof( struct student));
printf(""请输入第%d个学生的信息n""i+1);
scanf(""%s %s %d""stu1[i].idstu1[i].name &stu1[i].age );
fwrite(stu1+isizeof(STU)1fp);
}
fclose(fp);
if((fp=fopen(""d:student.txt""rb""))==NULL)
{
printf(""cannot open this filen"");
exit(0);
}
for(int j=0;j<N;j++)
{
memset(&stu2[j] 0 sizeof( struct student));
printf(""n"");
fread(stu2+jsizeof(STU)1fp);
printf(""第%d个学生的信息n""j+1);
printf(""%st %st %dn""stu2[j].idstu2[j].namestu2[j].age);}
fclose(fp);
}
运行:文件中显示结果:
年龄对应的为什么是乱码?
解决方案
因为你存的是整数,在计算机中它以原始值而不是ascii表示。如果要可读,需要定义成char类型,用itoa转换。
解决方案二:
比如1的ascii码是49
你在文件中存49,读出来的是""1""
如果你存的是1,那么读出来的其实是4个不可见的字符
解决方案三:
这种问题中学计算机课都应该学过的。
解决方案四:
ID可以定义成 char,为什么年龄不也一样定义成 char?这样,处理就统一了。
时间: 2024-08-29 14:43:45