从文件初始化嵌套结构的值

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++;
}

只需将有关如何读取值的代码添加到您的结构中即可。