gpt4 book ai didi

根据文件中的数字创建新变量 - C

转载 作者:太空宇宙 更新时间:2023-11-04 02:43:14 24 4
gpt4 key购买 nike

我的任务是根据文件中的输入信息创建发票。

我的一切都运行良好,但它是基于我对输入文件中不同人的数量的先验知识(即 2 个“客户”= 我制作了 2 个结构)。

我的问题是:如何获取给定的客户数量(在输入文件的第一行中)并使用它来创建该数量的独立结构。

Example: I read in "2" from the first line, and create 2 structs.

Example: I read in "4" from the first line, and create 4 structs.

我知道这是一个非常简单的解决方案,使用某种循环,从第一行开始计数直到达到所述数字,但是我如何创建/初始化正确数量的新结构?

我试过的一个例子是:

while(j<numOrders){
customer c[j];
j++;
}

使用当 j=2 时将创建 customer c2 的逻辑。我意识到这是不正确的,但我不确定如何解决这个难题。

这是我的其余代码,以便你们都能看到我到目前为止所做的事情:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct it{
char name[15];
float weight;
float price;
}item;

typedef struct c{
char first[10];
char last[15];
int numProducts;
item itemList[10];
}customer;

//customer createCustomer(int numOrders, FILE *input);
int main(){


FILE *input = fopen("invoice1.txt","r");

int numOrders, i=0,j=0;
customer c1,c2;
item i1;

fscanf(input,"%d",&numOrders);
fscanf(input,"%s %s",&c1.first, &c1.last);
fscanf(input,"%d",&c1.numProducts);
printf("%d\n%s %s %d\n",numOrders, c1.first, c1.last,c1.numProducts);
//while loop here
while (i<c1.numProducts){
fscanf(input,"%s %f %f", &c1.itemList[i].name, &c1.itemList[i].price, &c1.itemList[i].weight);
printf("%s %.2f %.2f\n",c1.itemList[i].name,c1.itemList[i].price,c1.itemList[i].weight);
i++;
}

fscanf(input,"%s %s %d",&c2.first, &c2.last,&c2.numProducts);
printf("%s %s %d\n", c2.first, c2.last,c2.numProducts);

while (j<c2.numProducts){
fscanf(input,"%s %f %f", &c2.itemList[j].name, &c2.itemList[j].price, &c2.itemList[j].weight);
printf("%s %.2f %.2f\n",c2.itemList[j].name,c2.itemList[j].price,c2.itemList[j].weight);
j++;
}

// c1 = createCustomer(numOrders, input);
system("pause");
return 0;
}

谢谢!!

最佳答案

您需要声明一个指向客户数组的指针。动态初始化会有所帮助。沿着这些线的东西:

customer *listOfCustomers;
fscanf(input,"%d",&numberOfCustomers);
listOfCustomers = (customer*)malloc(sizeof(customer)*numberOfCustomers);

然后您可以访问此 listOfCustomers 为

int i=0;
while(i<numberOfCustomers){
//Do Something with listOfCustomers[i]
}

如果您确定 numberOfCustomers 很小,您可以使用静态数组而不是指针。

#define N 50
customer listOfCustomers[N]

访问 listOfCustomers 的方法保持不变。

EDIT: How to use arrays in this case

使用我们上面写的循环,我们把它写成:

//we declare the pointer to customer c in the same manner as explained above.
customer *c;
fscanf(input,"%d",&numberOfCustomers);
c = (customer*)malloc(sizeof(customer)*numberOfCustomers);
while(i<numberOfCustomers){
fscanf(input,"%s %s",&c[i].first, &c[i].last);
fscanf(input,"%d",&c[i].numProducts);
//while loop here
int j=0;
while (j<c[i].numProducts){
fscanf(input,"%s %f %f", &c[i].itemList[j].name, &c1.itemList[j].price, &c[i].itemList[j].weight);
j++;
}
i++
}
//Then for printing the customer information we use a similar loop
i=0;
while(i<numberOfCustomers){
printf("FirstName: %s LastName: %s",c[i].first, c[i].last);
int j=0;
while (j<c[i].numProducts){
printf(input,"%s %f %f", c[i].itemList[j].name, c1.itemList[j].price, c[i].itemList[j].weight);
j++;
}
i++;
}

如果您需要更多详细信息,请随时询问。

关于根据文件中的数字创建新变量 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29838556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com