文件读写不适用于多种数据类型

时间:2018-09-05 10:58:29

标签: c

我有一个C语言程序,我想在其中将多个dataype值存储在文件中,并从文件中读取相同的值。以下代码将数据写入文件,但以不可读的形式存储数据。同样,当我获取这些数据时,也会得到垃圾值。

我正在使用Codeblocks 17.x

#include <stdio.h>
#include <stdlib.h>

struct student
{
   char name[100];
   int maths, hindi;
   char gend;
};

int main()
{
   struct student num[3];
   struct student num1;
   int i;
   FILE *fptr;
   if ((fptr = fopen("studlist.txt","w")) == NULL){
       printf("Error! opening file");
       exit(1);
   }

   for(i=0; i<=2; i++)
   {
      printf("Enter your name: ");
      gets(num[i].name);
      printf("Enter Marks in Maths: ");
      scanf("%d", &num[i].maths);
      printf("Enter Marks in Hindi: ");
      scanf("%d", &num[i].hindi);
      printf("Enter Gender (M/F) ");
      fflush(stdin);
      num[i].gend=getchar();
      fflush(stdin);
      fputs("Student ", fptr);
      putw(i, fptr);
      fwrite(&num[i], sizeof(struct student), 1, fptr);
      fputs("\n",fptr);
   }
   fclose(fptr);
   if ((fptr = fopen("studlist.txt","r")) == NULL){
       printf("Error! opening file");
       exit(1);
   }

   for(i=0; i<=2; i++)
   {
      printf("Student %d: ",i);
      fread(&num1, sizeof(struct student), 1, fptr);
      printf("%s | Maths: %d\tHindi: %d\tGender: %c\n", num1.name, num1.maths, num1.hindi, num1.gend);
   }
   fclose(fptr);
   return 0;
}

文件中存储的数据:

Data stored in the file

由于读取操作而显示的数据:

Data Shown as a result of read operation

此外,我无法实现搜索和更新代码。例如,如果我想更新珍妮的商标,我将无法做到。

请帮助。

1 个答案:

答案 0 :(得分:2)

问题是您的写作阅读不对称

您这样写每个student记录:

  fputs("Student ", fptr); /**/
  putw(i, fptr);           /**/
  fwrite(&num[i], sizeof(struct student), 1, fptr);
  fputs("\n",fptr);        /**/

然后您像这样读取每个student记录:

  fread(&num1, sizeof(struct student), 1, fptr);

只需摆脱多余的写操作(我用星号标记的行),它应该可以工作。