user-0 提问: 各位大佬们，我跪了，fwrite写入结构数组，为什么frean读出后数据不对

回复:
user: user-1
content: 引用 4 楼 NICEBOY97 的回复:为什么写入后读出的信息还是不一致，里面有些信息还是读入的烫字，那个int类型写入在文本里面无法正常显示吗？  读之前对buf  memset一下

user: user-0
content: 为什么写入后读出的信息还是不一致，里面有些信息还是读入的烫字，那个int类型写入在文本里面无法正常显示吗？

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  //#define NUMBER 1000;//可录入商品总数    #为啥要加分号 #define NUMBER 1000   //可录入商品总数  typedef struct good//单一商品结构 {     int number;//商品编号     char name[32];//={'\0','\0','\0','\0'};//商品名     char inprice[4];//={'\0','\0','\0','\0'};//商品进货价格     char outprice[4];//={'\0','\0','\0','\0'};//商品销售价格     int numbers;//商品库存量 }GOOD;  void fun1(){     printf("\n");     int o;     int choice;     int i=0;     /*     typedef struct good//单一商品结构     {         int number;//商品编号         char name[4];//={'\0','\0','\0','\0'};//商品名         char inprice[4];//={'\0','\0','\0','\0'};//商品进货价格         char outprice[4];//={'\0','\0','\0','\0'};//商品销售价格         int numbers;//商品库存量     }GOOD;     */     GOOD goods;      FILE *fp ;     fp=fopen("商品库存表.txt" , "a+");//打开文件     if ( fp == NULL )     {         printf("文件打开失败!\n") ;     }       do//商品信息录入     {         goods.number=0;         goods.number+=1;          printf("请输入入库商品的名称\n");//商品名         //scanf("%s",&goods.name);         scanf("%s", goods.name);         //getchar();          printf("请输入商品进货价格\n");//商品进货价格         //scanf("%s",&goods.inprice);         scanf("%s", goods.inprice);         //getchar();          printf("请输入商品销售价格\n");//商品销售价格         //scanf("%s",&goods.outprice);         scanf("%s", goods.outprice);         //getchar();          printf("请输入入库商品的数量\n");//商品库存数量         scanf("%d", &goods.numbers);          o=fwrite( &goods , sizeof(GOOD), 1, fp ); //将信息写入文件         printf("%d\n",o);          printf("是否继续录入?(按数字1继续，数字0退出)");//判断是否继续录入？         scanf("%d", &choice);//读取用户选择         //getchar();//吃回车     }     while(choice==1);      fclose(fp);//关闭文件夹 }  void fun3(){     char names[10];//用户购买商品名     int i=0;     int b,j,xuanze=0;     int count;     int m=0;     int c=0;      /*     typedef struct good//单一商品结构     {         int number;//商品编号         char name[10] ;//商品名         char inprice ;//商品进货价格         char outprice;//商品销售价格         int numbers;//商品库存量     }GOOD;     */     //GOOD *p;     GOOD goods[1000];      FILE *fp ;     fp=fopen("商品库存表.txt" , "a+");//打开文件     if ( fp == NULL )     {         printf("文件打开失败!\n");     }     rewind(fp);//指针位置重置     do     {         //count=fread(&goods,sizeof(GOOD),1,fp); //从文件中读所有商品的数据         count=fread(&goods[m],sizeof(GOOD),1,fp); //从文件中读所有商品的数据         if(count==1)             m++;     }while (!feof (fp));//判断是否读到文件尾     fclose(fp);     printf("系统准备完毕!\n");      printf("请输入要购买的商品名:\n");     scanf("%s",names);     getchar();      for(j=0;j<m;j++)//通过商品名查询价格     {         if(strcmp(names,goods[c].name) != 0)         {             xuanze=1;         }         c++;     }     if(xuanze!=1)         exit(0);      printf("请输入需要购买商品的数量\n");     scanf("%d",&b);     getchar();      if(b<=goods[i].numbers)//库存足够     {         printf("ok");     }     else         printf("%d",goods[i].number);  }    //void main() int main() {     int choice;     while(1)     {         printf("\n\n\n");         printf("****欢*迎*使*用*商*品*销*售*管*理*系*统****\n");         printf("*                                         *\n");         printf("*             1.库存表数据录入            *\n");         printf("*             2.销售表数据录入            *\n");         printf("*             3.销售商品                  *\n");         printf("*             4.库存表查询                *\n");         printf("*             5.销售表查询                *\n");         printf("*             0.退出                      *\n");         printf("*                                         *\n");         printf("*******************************************\n");         printf("please choice(0-5):");         scanf("%d",&choice);         switch(choice)         {             case 0:    exit(0);  // 头文件定义 <stdlib.h>,结束程序             case 1:    fun1()       ;break;             case 2:   // fun2()       ;break;             case 3:    fun3()       ;break;             case 4:   // fun4()       ;break;             case 5:    //fun5();                        break;          }      } } 供参考～  为什么声明两个结构体呢？ 还在每个函数里声明同名但不一样的结构体。 还要两个结构体在一个函数里运用？  fread/fwrite的是以二进制形式读取和写入的，因此打开文件内容会出现乱码。如果fscanf/fprintf不会，因为这对函数是格式话文本形式读写文件的。

user: user-0
content: 开始用的二进制，然后读出来信息对应不上，转换成txt,里面用一些烫烫字

user: user-3
content: 读写结构体，要采用二进制读写！打开方式用ab+