c - 从文件接收到数据并需要打印它,但程序没有正确读取数据?

标签 c io

在我的程序中,我必须打印一份包含来自 2 个文件“accounts.dat”和“transactions.dat”的数据的普通日志

accounts.dat 有:

1000:first
2000:second
3000:hello

transactions.dat 有

1000:first:d:1000.000000
2000:second:c:1500.000000
3000:hello:d:1000.000000

所以基本上相同的数据除了交易还有 2 个。

当我检查扫描文件数据并将其输入到程序中的数组的读取函数时,它们就在那里,但是当我调用 generaljournal 函数以特定格式打印它时,通用日志不承认扫描到我的阵列中的文件。

函数是:

void generaljournal(int accounts[MAX], int accounts3[MAX], char debcred[MAX], double amount[MAX], char accname[MAX][MAXSTRING], char transname[MAX][MAXSTRING], int *totalinput) {

int i = 0;

printf ("\n");
printf ("\t\t\tGeneral Journal\n");
printf ("Account  Description                          Debit      Credit\n");
printf ("-------  ------------------------------  ----------  ----------\n");


for (i = 0; i < *totalinput; i++)
{
    printf ("   %d", accounts[i]);


    if (debcred[i] == 'd')
    {
        printf ("  %-35s", transname[i]);
        printf ("%.2lf\n", amount[i]);
    }


    else if (debcred[i] == 'c')
    {
        printf ("  %-47s", transname[i]);
        printf ("%.2lf\n", amount[i]);
    }

}

printf ("\n");

}

所有被调用的数组都有数组中的数据,但当我调用通用日志函数时没有被打印出来。我在我的 main 中调用了读取函数,但即使我把

read(accounts, accounts3, debcred, amount, accname, transname);

在我的一般日记功能中,它仍然没有做任何事情。 输出应该是这样的

Account     Description     Debit     Credit
1000        first           1000.000
2000        second                    1500.00
3000        hello           1000.00

相反,它只打印 (accounts, description, debit, credit) 的外壳,下面没有任何值。

有谁知道为什么当我从读取函数中的文件中扫描所有数组时它不接受数组中的值?如果需要更多信息,我会提供。我的阅读功能是:

void read (int accounts[MAX], int accounts3[MAX], char debcred[MAX], double amount[MAX], char accname[MAX][MAXSTRING], char transname[MAX][MAXSTRING]) {

FILE *fp1 = NULL;
FILE *fp2 = NULL;

fp1 = fopen("accounts.dat", "r");
fp2 = fopen("transactions.dat", "r");

int h = 0;



if (fp1 != NULL) // READING THE FILE
{
    while(fscanf(fp1, "%d", &accounts[h]) != EOF)
    {

            fgetc(fp1);
            fscanf(fp1, "%30[^\n]", &accname[h]);
            h++;
    }

    fclose(fp1);
}
else
    printf ("Failed to open file\n");



if (fp2 != NULL) // READING THE FILE
{
    int j = 0;
    while(fscanf(fp2, "%d", &accounts3[j]) != EOF)
    {
        fgetc(fp2);
        fscanf(fp2, "%30[^:]", &transname[j]);
        fgetc(fp2);
        fscanf(fp2, "%c", &debcred[j]);
        fgetc(fp2);
        fscanf(fp2, "%lf", &amount[j]);
        j++;
    }

    fclose(fp2);
}
else
    printf ("Failed to open file\n");

}

最佳答案

也许*totalinput的值是0

关于c - 从文件接收到数据并需要打印它,但程序没有正确读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13733270/

相关文章:

c - cos() 的数学表达式不返回期望值

c - 如何从 Windows 程序访问类似 netstat 的以太网统计信息

go - bufio.NewScanner(r) 从 r 调用 Scan() 排出缓冲区

c# - 如何检查文件当前是否打开或正在写入 .NET?

java - 使用 DataInputStream 逐字节复制文件在完成之前停止

<80 字符行的 C 风格指南提示

c - ACS_BLOCK 和 ACS_CKBOARD 在 nCurses 中不工作,而其余的 ACS 字符在工作

java - 使用java,从文件夹位置提取列表文件名的最资源有效的方法是什么

c# - 如何检查文件锁定?

c++ - 使用 sizeof 在 C++ 中得到不同的结果