从文件初始化嵌套结构的值
initialize values of a nested struct from a file
我在 C 语言中遇到了结构问题,有人可以帮忙吗?我是 C 和结构的新手,所以请善待我。我在下面声明了两个结构,其中一个嵌套在另一个结构中。
struct orders_tag {
int number_of_orders;
char item_name[20];
int price;
};
typedef struct orders_tag order;
struct customer_tag {
char name[30];
order total_order[10];
};
typedef struct customer_tag customer;
我也在 main 中初始化了这些值。
customer cus_array[20];
customer c;
我正在尝试从文件中读取信息并将这些值放入我的嵌套结构中,但我真的不明白这里发生了什么。任何解释将不胜感激。
infile = fopen("input.txt", "r");
if (infile == NULL) {
printf("Couldn't open the fire.");
return 1;
}
while (fscanf(infile, "%s %d %s %2f", c.name, c.total_order.number_of_orders
, c.total_order.item_name, c.total_order.price) != EOF) {
}
我相信我得到的唯一错误是 while 循环条件。
在您的代码中,price
定义为 int
并且您正在使用 %2f
来读取该值。不正确。
仅供参考,第 7.19.6.2 章第 10 段,C99
标准,
Unless assignment suppression was indicated by a *, the result of the conversion is placed in the object pointed to by the first argument following
the format argument that has not already received a conversion result.If this object does not have an appropriate type, or if the result of the conversion cannot be represented in the object, the behavior is undefined.
接下来,对于 fscanf()
,您应该提供必须存储值的内存位置的指针。您需要根据需要使用&
。
此外,在 c.total_order.number_of_orders
情况下,total_order
是一个数组,因此您必须使用数组下标来表示数组中的特定变量。像
c.total_order[i].number_of_orders
其中 i
用作索引。
在您将 total_order 声明为数组的 customer_tag 结构中,您应该在扫描值时引用每个元素。此外,在 fscanf
中的 int 值之前需要一个 &
while (fscanf(infile, "%s %d %s %2f", c.name, &(c.total_order[0].number_of_orders)
, c.total_order[0].item_name, &(c.total_order[0].price)) != EOF) {}
只是可能有某种增量器来更改您正在访问的 total_order 数组的哪个元素
int i=0;
while (fscanf(infile, "%s %d %s %d", &c.name,&c.total_order[i].number_of_orders
, &c.total_order[i].item_name, &c.total_order[i].price) == 4) {
i++;
}
只需将有关如何读取值的代码添加到您的结构中即可。
我在 C 语言中遇到了结构问题,有人可以帮忙吗?我是 C 和结构的新手,所以请善待我。我在下面声明了两个结构,其中一个嵌套在另一个结构中。
struct orders_tag {
int number_of_orders;
char item_name[20];
int price;
};
typedef struct orders_tag order;
struct customer_tag {
char name[30];
order total_order[10];
};
typedef struct customer_tag customer;
我也在 main 中初始化了这些值。
customer cus_array[20];
customer c;
我正在尝试从文件中读取信息并将这些值放入我的嵌套结构中,但我真的不明白这里发生了什么。任何解释将不胜感激。
infile = fopen("input.txt", "r");
if (infile == NULL) {
printf("Couldn't open the fire.");
return 1;
}
while (fscanf(infile, "%s %d %s %2f", c.name, c.total_order.number_of_orders
, c.total_order.item_name, c.total_order.price) != EOF) {
}
我相信我得到的唯一错误是 while 循环条件。
在您的代码中,price
定义为 int
并且您正在使用 %2f
来读取该值。不正确。
仅供参考,第 7.19.6.2 章第 10 段,C99
标准,
Unless assignment suppression was indicated by a *, the result of the conversion is placed in the object pointed to by the first argument following the format argument that has not already received a conversion result.If this object does not have an appropriate type, or if the result of the conversion cannot be represented in the object, the behavior is undefined.
接下来,对于 fscanf()
,您应该提供必须存储值的内存位置的指针。您需要根据需要使用&
。
此外,在 c.total_order.number_of_orders
情况下,total_order
是一个数组,因此您必须使用数组下标来表示数组中的特定变量。像
c.total_order[i].number_of_orders
其中 i
用作索引。
在您将 total_order 声明为数组的 customer_tag 结构中,您应该在扫描值时引用每个元素。此外,在 fscanf
中的 int 值之前需要一个 &while (fscanf(infile, "%s %d %s %2f", c.name, &(c.total_order[0].number_of_orders)
, c.total_order[0].item_name, &(c.total_order[0].price)) != EOF) {}
只是可能有某种增量器来更改您正在访问的 total_order 数组的哪个元素
int i=0;
while (fscanf(infile, "%s %d %s %d", &c.name,&c.total_order[i].number_of_orders
, &c.total_order[i].item_name, &c.total_order[i].price) == 4) {
i++;
}
只需将有关如何读取值的代码添加到您的结构中即可。