根据文件中的数字创建新变量 - C
Create new variables based on number from file - C
我的任务是根据文件中的输入信息创建发票。
我一切正常,但这是基于我对输入文件中不同人的数量的先验知识(即 2 "customers" = 我制作了 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.
我知道这是一个非常简单的解决方案,使用某种循环,从第一行开始计数直到达到所述数字,但是我如何 create/initialize 新结构的正确数量?
我试过的一个例子是:
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++;
}
如果您需要更多详细信息,请随时询问。
您需要首先将输入作为客户数量,然后使用循环获取所有客户的信息并将它们存储在您想要的位置。
我的任务是根据文件中的输入信息创建发票。
我一切正常,但这是基于我对输入文件中不同人的数量的先验知识(即 2 "customers" = 我制作了 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.
我知道这是一个非常简单的解决方案,使用某种循环,从第一行开始计数直到达到所述数字,但是我如何 create/initialize 新结构的正确数量?
我试过的一个例子是:
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++;
}
如果您需要更多详细信息,请随时询问。
您需要首先将输入作为客户数量,然后使用循环获取所有客户的信息并将它们存储在您想要的位置。