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

时间:2015-02-06 09:12:10

标签: c arrays file-io struct format-specifiers

我在使用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循环条件。

3 个答案:

答案 0 :(得分:2)

在您的代码中,price被定义为int,并且您正在使用%2f来读取该值。不正确。

仅供参考,第7.19.6.2章,第10段,C99标准,

  

除非用*指示赋值抑制,否则转换的结果将放在下面第一个参数指向的对象中   尚未收到转换结果的format参数。如果此对象没有合适的类型,或者无法在对象中表示转换结果,则行为未定义。

接下来,使用fscanf(),您应该提供必须存储值的内存位置的指针。您需要根据需要使用&

此外,在c.total_order.number_of_orders个案例中,total_order是一个数组,因此您必须使用数组下标来表示数组中的特定变量。

之类的东西
c.total_order[i].number_of_orders

其中i用作索引。

答案 1 :(得分:0)

在customer_tag结构中,您将total_order声明为数组,在扫描值时应引用每个元素。另外,&在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数组的哪个元素

答案 2 :(得分:0)

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

只需添加有关如何读取结构值的代码。