我在使用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循环条件。
答案 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++;
}
只需添加有关如何读取结构值的代码。