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

ln206

我在弄清楚代码中出了什么问题时遇到了麻烦。我认为我的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;
}
苏拉夫·戈什(Sourav Ghosh)

您的代码中有很多问题。

第一点:您必须提供地址[pointer]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毛衣$ 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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用fscanf在C中逐行读取文本文件

来自分类Dev

使用fscanf()读取多个值(如下面的文本文件中所示)

来自分类Dev

使用'/ n'从文本文件读取

来自分类Dev

使用Javascript读取文本文件

来自分类Dev

使用IAsyncEnumerable读取文本文件

来自分类Dev

读取文本文件-使用Swift

来自分类Dev

使用python读取文本文件

来自分类Dev

文本文件fscanf问题

来自分类Dev

从文本文件读取

来自分类Dev

从文本文件读取

来自分类Dev

使用Powershell读取文本文件并查找文本

来自分类Dev

无法正确实现fscanf来读取文本文件

来自分类Dev

fscanf 在第 254 行数据后停止从文本文件读取

来自分类Dev

使用pl / sql从文本文件读取文件

来自分类Dev

使用numpy从文本文件中读取文件

来自分类Dev

如何读取已在使用的文本文件(Windows C ++)

来自分类Dev

如何使用熊猫读取文本文件的键,值对?

来自分类Dev

在Swift中使用NSURL读取文本文件

来自分类Dev

使用Swift读取文本文件的Python方法

来自分类Dev

使用PHP读取部分文本文件

来自分类Dev

使用Javascript读取本地文本文件

来自分类Dev

使用Boost mmap读取文本文件

来自分类Dev

使用循环JAVA读取文本文件

来自分类Dev

使用C#从文本文件读取

来自分类Dev

使用JavaCC从文本文件读取输入

来自分类Dev

使用正确的colClasses读取文本文件

来自分类Dev

如何使用python读取文本文件中的数字?

来自分类Dev

从文本文件读取,而不必使用readline()

来自分类Dev

使用scanf重新读取c中的文本文件