Chinaunix首页 | 论坛 | 博客
  • 博客访问: 60267
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 202
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-26 15:34
个人简介

爱技术的大学狗

文章分类

全部博文(8)

文章存档

2014年(8)

我的朋友

分类: C/C++

2014-03-24 20:58:02

今天写数据结构作业的时候用到结构体的二进制读写,之前也一直没弄透,然后今天就花点时间弄弄

然后突然发现个蛋疼的问题,,,

当以二进制的方式写如文本后,然后用二进制方式读的时候发现神马都读取不了!!

google百度加查书了一番,发现是输入字符串的时候最后是以'\n'还是'\0'结束问题。
然后加上 rewind()   一切便好了。。。如下面代码所示。
 

但是还是不是很明白为什么,我分别用了两个文件指针,一个读(*out),一个写(*in),为什么要把rewind()加上去才可以呢???
我试过把out指向了文件的第一位也读取不了。请教下各位。
小弟用的编译器是gcc。


点击(此处)折叠或打开



  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct s
  4. {
  5.      char name[10];
  6.      char dp[10];
  7.      int base_pay;
  8.      int allowance;
  9.      int total;    
  10. }Staff;

  11. void main()
  12. {
  13.     int number,i=1;
  14.     printf("how many number you enter?:\n");
  15.     scanf("%d",&number);
  16.     Staff staff,*temp;
  17.     FILE *in,*out;
  18.     in=fopen("./paydate","wb");
  19.     for(i=1;i<=number;i++)
  20.     {
  21.     printf("Enter no.%d information:\n name,department,base pay,allowance,total\n",i);
  22.     scanf("%s%s%d%d%d",staff.name,staff.dp,&staff.base_pay,&staff.allowance,&staff.total);
  23.     temp=(Staff*)malloc(sizeof(Staff));
  24.     fwrite(&staff,sizeof(Staff),1,in);
  25.     }
  26.     close(in);

  27.     out=fopen("./paydate","rb");


  28.     rewind(in);                        /////////// bug !!!!   注意这里
  29.  
  30.  

  31.     for(i=0;i<number;i++)
  32.     {
  33.     fread(temp,sizeof(Staff),1,out);
  34.     printf("name:%s ",temp->name);
  35.     printf("dp:%s ",temp->dp);
  36.     printf("base_pay:%d ",temp->base_pay+100);
  37.     printf("allowance:%d ",temp->allowance);
  38.     printf("total%d ",temp->total);
  39.     printf("\n");
  40.     }
  41.     close(out);
  42. }
阅读(706) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~