首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

文件读取,在屏上打印,打完信息多打很多乱码?解决方案

2012-04-27 
文件读取,在屏上打印,打完信息多打很多乱码?大家好,我是菜鸟C_er,刚学C语言不久,今天写一个学生信息管理程

文件读取,在屏上打印,打完信息多打很多乱码?
大家好,我是菜鸟C_er,刚学C语言不久,今天写一个学生信息管理程序,保存部分以及输出打印部分代码如下!
主函数调用new_file(),new_file()调用save(),主函数再调用browse().
输入信息:1001,gmr,M,21,jiangxi  
打印结果:NO.1 1001,gmr ,M,21,jiangxi,i,1769498478,
请高手指点这是为什么?以及应怎样改才能正常显示?
N 是定义的一个常量,表示学生的个数。
以下是定义struct student型数据
struct student  
{long int number;
char name[10];
char sex;
int age;
char addr[20];
int yuwen;
int shuxue;
int sum;
};
struct student stu[N];

void new_file()  
{ void save();
  int i;
  for (i=0;i<N;i++)
  scanf("%ld,%s,%c,%d,%s",&stu[i].number,stu[i].name,&stu[i].sex ,&stu[i].age ,stu[i].addr);
  save();  
  printf("保存成功!");
}

void save()
{FILE *fp;
  int i;
  if ((fp=fopen("student1.dat","wb"))==NULL)  
  {printf("文件打开失败!\n");
  return;
  }
  for (i=0;i<N;i++)
  if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
  {printf("写入失败!\n");
  return;
  }
  fclose(fp);
}



void browse() //查看
{
printf("以下是学生信息\n");
int i;
FILE *fp;
if ((fp=fopen("student1.dat","rb"))==NULL)
  {printf("文件打开失败!\n");
  return;
  }
for (i=0;i<N;i++)
  {fseek(fp,i*sizeof(struct student),0);
  fread(&stu[i],sizeof(struct student),1,fp);
  printf("%d %ld,%s,%c,%d,%s\n",i+1,stu[i].number,stu[i].name,stu[i].sex ,stu[i].age ,stu[i].addr);
  }
  fclose(fp);
  return;
}



[解决办法]
输入部分写法不妥,stu[i].name实际值为“gmr,M,21,j”,而不是期望的“gmr”,其余变量也都没有接收到正确值。
正确写法如下:
 

C/C++ code
  printf ("Enter your family name: ");  scanf ("%s",str);    printf ("Enter your age: ");  scanf ("%d",&i);  .......
[解决办法]
if (fwrite(&stu[i],sizeof(struct student),1,fp) != 1) //???

热点排行