1

このプログラムには「accounts.dat」というファイルがあり、このファイルには次のようなデータ行がいくつかあります

1000:first
2000:second
3000:third

しかし、データ値をプログラムの配列に fscanf しようとすると、次のようになります。

0:$ s·°Ïÿ¿
1:t·¨BuÞZ·
-1217025816:s·0s·É¥s·hp[·4£s·

スキャンされた値として、または少なくともそれが表示されているものです。

値をスキャンする私の機能は次のとおりです。

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

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++;

            printf("%d:%s\n", accounts[h], accname[h]);

    }

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

}

そして、メインで読み取り関数を呼び出す方法は次のとおりです。

read(accounts, debcred, amount, accname, transname, &i);

そして、メイン関数での私の宣言は次のとおりです。

int accounts[MAX], accounts2[MAX], account;
char debcred[MAX], accname[MAX][MAXSTRING], transname[MAX][MAXSTRING];
double amount[MAX];

誰でも私の問題が何であるかを理解できますか? ファイルのデータ行がプログラムの配列に正しくスキャンされないのはなぜですか?

4

1 に答える 1

3
fscanf(fp1, "%30[^\n]", &accname[h]);
h++;
printf("%d:%s\n", accounts[h], accname[h]);

印刷h にインクリメントしてみてください。

于 2012-12-05T21:05:13.420 に答える