gpt4 book ai didi

c - 使用 fscanf() 从文本文件读取

转载 作者:行者123 更新时间:2023-11-30 19:17:18 26 4
gpt4 key购买 nike

我无法弄清楚我的代码中出了什么问题。我认为我的 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;
}

最佳答案

您的代码中有很多问题。

第 1 点:您必须向 fscanf() 提供地址 [指针]来存储该值。改变

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) {

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) {

第2点:在你的输入文件中,每行的输入是

Smith 3 Sweater $22.50

因此,您必须将 fscanf() 格式更改为 "%s %d %s $%lf" 以匹配输入。因此,始终建议检查 fscanf() 及其系列的重新运行值,以确保正确扫描所有值。

第 3 点:customerCounter 变量使用错误。

第 4 点:根据您的输入文件,total_order 不必是数组。

检查下面的代码。它有效。

#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; //array not required
};

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.number_of_orders
, c.total_order.item_name, &c.total_order.price) != EOF) {//notice the changes here
cus_array[customerCounter] = c;
customerCounter++;
if (customerCounter == 20) break; // memory allocated for only 20 elements
}

int j;
for(j = 0; j < customerCounter ; j++) {
printf("Customer :%10s, Number of order : %2d, Item : %10s, Price : $%f\n",
cus_array[j].name, cus_array[j].total_order.number_of_orders,cus_array[j].total_order.item_name, cus_array[j].total_order.price);
}
return 0;
}

关于c - 使用 fscanf() 从文本文件读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28374888/

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