1

私のプログラムでは、「accounts.dat」と「transactions.dat」の 2 つのファイルからのデータを含む一般ジャーナルを印刷する必要があります。

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 つのデータがあります。

ファイルデータをスキャンしてプログラム内の配列に入力する読み取り関数をチェックしたとき、それらはそこにありますが、一般的なジャーナル関数を呼び出して特定の形式で印刷すると、一般的なジャーナルはそのファイルを認識しません私の配列にスキャンされます。

機能は次のとおりです。

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");

}

呼び出されるすべての配列には配列内のデータがありますが、一般的なジャーナル関数を呼び出すと印刷されません。メインで読み取り関数を呼び出しますが、

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

私の一般的なジャーナル機能では、まだ何もしません。出力がどのように見えるべきかは、次のようなものです

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

代わりに、(アカウント、説明、借方、貸方) のシェルのみを出力し、その下に値はありません。

読み取り関数でファイルからすべてをスキャンしたときに、配列の値を受け入れない理由を知っている人はいますか? さらに情報が必要な場合は、私が提供します。私の読み取り機能は次のとおりです。

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");

}
4

1 に答える 1

0

多分値*totalinput0

于 2012-12-05T22:49:36.353 に答える