我怎样才能成功地将所有文件 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);
我有一个包含我创建的默认数据的文本文件。现在我想将它们放入我的数组中。但没有成功..我不知道为什么只有结构数据的第一条记录可以存储在我的数组中。
我要前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);