我怎样才能成功地将所有文件 IO 记录放入我的数组中?

How can i put all file IO record in my array successfully?

我有一个包含我创建的默认数据的文本文件。现在我想将它们放入我的数组中。但没有成功..我不知道为什么只有结构数据的第一条记录可以存储在我的数组中。

我要前9条存入Arr[0],后9条存入Arr[1] ,第三条9条记录存入Arr[2] 但是结果只有recordNum可以存入Arr[ I ].

如果你能帮助我,我非常感激你,我为你感到骄傲,因为我尝试了很多次都不成功

这是我的数据文件内容:

1001 - bric - 1 - human - 10 - 70.00  - Eric - home - arrive

1002 - She  - 1 - human - 10 - 50.00  - she  - home - arrive

1003 - She  - 2 - human - 10 - 120.00 - Eric - home - arrived

这是我的代码:

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

struct record{
   char recordnum [40];
   char itemrecord [40];
   char quantity [40];
   char weight [40];
   char itemname [40];
   char catagory [40];
   char recipient [40];
   char final_destination [40];
   char status [40];
};

int main(){
   FILE *fileptr1, *fileptr2, fileptr3;
   char filename[40]="data.txt";
   int save; 
   char delete_num ;
   char reply;
   int  n=1 , i=0;
   #define MAX 9
   struct record Arr[MAX];

   printf("Enter file name: ");
   scanf("%s", filename);

   //open file in read mode
   fileptr1 = fopen(filename, "r");
   if (fileptr1== NULL){
      printf("open unsuccessful,file not exist"); 
      exit(1);
   }

   while(n>0){
      n=fscanf(fileptr1,"%s %s %s %s %s %s %s %s %s",Arr[i].recordnum, 
      Arr[i].itemname, Arr[i].itemrecord, Arr[i].catagory, Arr[i].quantity, 
      Arr[i].weight, Arr[i].recipient, Arr[i].final_destination, 
      Arr[i].status ); 
      i++;
   }
   n=i;
   for(i=0; i<n-1 ;i++){
      printf("%s \n"  ,Arr[i]);
   }
   fclose(fileptr1);
   return 0;
}

结果:

Enter file name: data.txt
1001
1002
1003

printf 函数的 "%s" 格式适用于字符串。 c 中的字符串表示为一维数组(或指向内存部分的指针),其中包含字符 以 '\0' 字符结尾.

在这里你试图用这种格式打印一个struct record类型的变量,这是未定义的行为,在你的例子中它碰巧由Arr + i指向的字节(这是地址类型 struct record) 的值 Arr[i]Arr[i].recordnum 的值,因此因为您告诉 printf 使用 "%s" 格式将这些字节视为字符串,字符将被打印直到'[=18=]' 字符满足。但是,这是未定义的行为,因为根据体系结构,结构可能在开头有填充字节而不是其第一个字段的字节。

没有 printf 格式来打印您的自定义结构,因此您需要使用各自的格式手动打印每个结构字段,在您的例子中 %s.

printf("%s, ..., %s\n", Arr[i].recordnum, ..., Arr[i].status);