Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C----如何成功地将所有文件IO记录放入阵列中?谢谢你_C_Arrays_Struct_File Io - Fatal编程技术网

C----如何成功地将所有文件IO记录放入阵列中?谢谢你

C----如何成功地将所有文件IO记录放入阵列中?谢谢你,c,arrays,struct,file-io,C,Arrays,Struct,File Io,我有一个带有我创建的默认数据的文本文件。现在我想把它们放到我的数组中。但不是成功。。我不知道为什么只有结构数据的第一条记录可以存储在我的数组中 我希望前9条记录存储在Arr[0]中,第9条记录存储在Arr[1]中 ,以及存储在Arr[2]中的第三条9记录,但结果是只有recordNum可以存储在Arr[I]中 如果你能帮助我,我非常感激和自豪,因为我尝试了很多次都不能成功 以下是我的数据文件内容: 1001 - bric - 1 - human - 10 - 70.00 - Eric - ho

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

我希望前9条记录存储在Arr[0]中,第9条记录存储在Arr[1]中 ,以及存储在Arr[2]中的第三条9记录,但结果是只有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;
}

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

在这里,您试图使用此格式打印
struct record
类型的变量,这是一种未定义的行为,在您的示例中,
Arr+i
所指向的字节(这是
struct record
类型的值
Arr[i]
的地址)是
Arr[i]的字节,因此,因为您告诉printf使用
“%s”
格式将这些字节视为字符串,所以字符将一直打印到满足
'\0'
字符为止。但是,这是未定义的行为,因为根据体系结构,结构的开头可能有填充字节,而不是第一个字段的字节

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

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

查看printf(“%s\n”,Arr[i])
是指向字符串的指针吗?提示:启用所有编译器警告。但此处没有编译器警告和错误@chuxDo不只是使用默认设置。启用所有警告。你在用什么编译器?再说一遍:
Arr[i]
是指向字符串的指针吗?您应该一个接一个地打印结构的每个字段,使用
%s
格式打印结构是未定义的行为。好的,我得到以下警告:[警告]格式“%s”要求参数类型为“char*”,但参数2的类型为“struct record”[-Wformat=]。那么我的内容成功地存储在我的数组中了吗?是的@HangWui,但是你应该亲自检查一下。因为我需要在我的程序中添加删除功能,当我键入recordNum时,整个rekevant记录将被删除@alamiti我担心一个i中是否有9个记录存储 ?
printf("%s, ..., %s\n", Arr[i].recordnum, ..., Arr[i].status);