【发布时间】:2015-02-06 21:12:48
【问题描述】:
我无法弄清楚我的代码出了什么问题。我认为我的 while 循环没有正确读取文件,我试图打印出客户名称但没有任何显示。
例如,我有一个这样的文件。
Smith 3 Sweater $22.50
Reich 3 Umbrella $12.50
Smith 1 Microwave $230.00
Lazlo 1 Mirror $60.00
Flintstone 5 Plate $10.00
Lazlo 1 Fridge $1200.00
Stevenson 2 Chair $350.00
Smith 10 Candle $3.50
Stevenson 1 Table $500.00
Flintstone 5 Bowl $7.00
Stevenson 2 Clock $30.00
Lazlo 3 Vase $40.00
Stevenson 1 Couch $800.00
这是我的代码:
#include <stdio.h>
#include <string.h>
struct orders_tag {
int number_of_orders;
char item_name[20];
double price;
};
typedef struct orders_tag order;
struct customer_tag {
char name[30];
order total_order[100];
};
typedef struct customer_tag customer;
int main(void) {
FILE *infile;
customer cus_array[20];
customer c;
int customerCounter = 0;
setvbuf(stdout, NULL, _IONBF, 0);
infile = fopen("input.txt", "r");
if (infile == NULL) {
printf("Couldn't open the fire.");
return 1;
}
while (fscanf(infile, "%s %d %s %lf", c.name, c.total_order[customerCounter].number_of_orders
, c.total_order[customerCounter].item_name, c.total_order[customerCounter].price) != EOF) {
cus_array[customerCounter] = c;
customerCounter++;
}
int j;
for(j = 0; j < customerCounter; j++) {
printf("%s", cus_array[j].name);
}
return 0;
}
【问题讨论】:
-
除了将
&用于int和double,建议:不要比较fscanf(...) != EOF),而是使用fscanf(...) == 4)。这将终止扫描问题的循环,而不是陷入无限循环。 IOW,当代码获得所有它的输入时使用数据。