【问题标题】:How to read data in a file using fscanf如何使用 fscanf 读取文件中的数据
【发布时间】:2019-07-31 05:24:37
【问题描述】:

我在一个文件中有一个表格格式。我想使用 fscanf 打印它。表格如下所示,有 6 列 4 行。

Name       Date          Opening    Amount     Type             Closing
Thiluxan   21.05.2015    8500       4500       Withdrawal       4000
Black      05.02.2014    7896       6548       Withdrawal       1348
Whitee     02.05.2015    8524       256394     Deposit          264918
FILE *file1;
file1 = fopen("Bank.txt","r");
while(fscanf(file1, "%s %s  %s  %s  %s  %s", text) != EOF ) {
    printf("%s\n", text);
}
fclose(file1);

输出不显示任何内容并返回一个空白屏幕

【问题讨论】:

  • 您的格式字符串中有 6 个格式化字段,但您只写入了 1 个变量 text。这会导致未定义的行为。
  • 你想用fscanf打印它吗?你知道fscanf 是做什么的吗?
  • 你没有检查 fopen 的结果。
  • @Barmar 这是在哪里指定的?
  • scanf 系列函数的文档。每个格式化运算符都需要一个对应的变量来写入。

标签: c


【解决方案1】:

正如上面的 answer 和 cmets 所指出的,您需要在 fscanf 参数中提供六个变量。此外,如果您有数据模型会更好。我建议使用struct 并将所有数据输入到structs 的数组中,这样您就可以更好地管理它而不是管理随机变量。

#include <stdio.h>

typedef struct Bank {
    char name[100];
    char date[100];
    char opening[100];
    char amount[100];
    char type[100];
    char closing[100];
} Bank;

int main() {
    FILE *file1;
    file1 = fopen("Bank.txt","r");

    Bank bankList[100];
    int nCustomers = 0;
    while(fscanf(file1, "%s%s%s%s%s%s", bankList[nCustomers].name, bankList[nCustomers].date, bankList[nCustomers].opening, bankList[nCustomers].amount, bankList[nCustomers].type, bankList[nCustomers].closing) != EOF ){
            printf("%s %s %s\n", bankList[nCustomers].name, bankList[nCustomers].date, bankList[nCustomers].opening);
            nCustomers++;
    }
    fclose(file1);
}

【讨论】:

    【解决方案2】:

    您的错误是您传递给fscanf 的变量数量。 如果要读取 6 个字符串,则需要提供 6 个字符串变量来保存

    就像这样

    FILE * file1;
    file1 = fopen("Bank.txt", "r");
    while (fscanf(file1, "%s %s  %s  %s  %s  %s", t1, t2, t3, t4, t5, t6) != EOF) {
        printf("%s %s %s %s %s %s\n", t1, t2, t3, t4, t5, t6);
    }
    fclose(file1);
    

    当然你必须实例化所有ts

    【讨论】:

    • 除此之外,最好检查fopen 的返回值并确保fscanf 的返回值是预期的参数数量,而不仅仅是检查它不是EOF
    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多