C语言如何把结构体存入文件。。。。。输出有乱码。。。

#include<stdio.h>#include<stdlib.h>#defineN3structstudent{intnumber;charname[16],sex;... #include <stdio.h>
#include <stdlib.h>
#define N 3
struct student
{
int number;
char name[16],sex;
float score[3],aver;

};
void main()
{
FILE *fp;
char ch;

struct student s[N];

int number,i;
printf("please input %d students' information as follow:\n",N);
printf("number name sex score[0] score[1] score[2]\n]");
for(i=0;i<N;i++)
{
printf("please input %dth student's informatio:\n",i+1);
scanf("%d%s%*c%c%f%f%f",&s[i].number,s[i].name,&s[i].sex,&s[i].score[0],&s[i].score[1],&s[i].score[2]);
}

if((fp=fopen("c:\\abc.c","w"))==NULL)
{
printf("file open error.\n");
exit(0);
}
for (i=0;i<N;i++)
fwrite(&s[i],sizeof(s),1,fp);
//fprintf(fp,struct s[N]);
fclose(fp);
if((fp=fopen("c:\\abc.c","r"))==NULL)
{
printf("file open error.\n");
exit(0);
}
while(!feof(fp))
if((ch=fgetc(fp))!=EOF)
putchar(ch);
fclose(fp);
} //意思大概就是写入几个个学生的信息并存入一个文件
展开
 我来答
hawkie
2014-06-17 · TA获得超过445个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:122万
展开全部
你的结构体里即有数字,又有Float 又有字符串。保存时也没有格式转换,原格式直接存入的。 那么你要输出时还是需要按原来存入时的格式输出。

直接用putchar 输出 整数或者Float 都会导出错误和乱码。 你需要用 fread 直接读取到 struct student 类型的结构体中, 然后按项按类型打印输出才行。

否则就把 所以变量都弄成字符串的。
追问
额。。。能不能直接把程序写出来,这样我还是不太懂诶!谢谢!  而且输入就有问题。。。
追答

代码

... ...
void main()
{
  FILE *fp;
  char ch;
  struct student s[N];
  int number,i;
  
  printf("please input %d students' information as follow:\n",N);
  printf("number name sex score[0] score[1] score[2]\n");
  for(i=0;i<N;i++)
  {
    printf("please input %dth student's informatio:\n",i+1);
    fflush(stdin);
    scanf("%d %s %c %f %f %f",  &s[i].number,s[i].name,&s[i].sex,
          &s[i].score[0],&s[i].score[1],&s[i].score[2]);
    s[i].aver = (s[i].score[0] + s[i].score[1] + s[i].score[2])/3;
   }
    
  if((fp=fopen("abc.c","wb"))==NULL)
  {
    printf("file open error.\n");
    exit(0);
  }
  for (i=0; i<N; i++) {
    fwrite(&s[i],sizeof(s[i]),1,fp); 
  }
  fclose(fp);
 
  if((fp=fopen("abc.c","rb"))==NULL)
  {
    printf("file open error.\n");
    exit(0);
  }
  struct student tmp;
  while(!feof(fp) && fread(&tmp, sizeof(tmp), 1, fp)) {
    printf("%d\t%s\t%c\t%.2f\t%.2f\t%.2f\t%.2f\n", tmp.number, tmp.name,
           tmp.sex,tmp.score[0], tmp.score[1], tmp.score[2], tmp.aver);
  }
  fclose(fp);
}
code2
2014-06-17 · TA获得超过1268个赞
知道小有建树答主
回答量:1316
采纳率:79%
帮助的人:381万
展开全部
if((fp=fopen("c:\\abc.c","w"))==NULL)

改为 if((fp=fopen("c:\\abc.c","w+b"))==NULL)

if((fp=fopen("c:\\abc.c","r"))==NULL)
if((fp=fopen("c:\\abc.c","r+b"))==NULL)
试一下
追问
还有别的问题。。。谢谢了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式