2016-10-02 5 views
0

ありがとうございました。私は以下のフォーマットとして.datファイル有する:.datファイルの整数と浮動小数点数をC言語で格納してください

3 10.9 
1 2.1 
(empty line) 
10 10.05 
10 200 

ライン毎に、私は可変

int c; 
FILE *fp = fopen("supermarket.dat", "r"); 
while ((c = fgetc(fp)) != EOF) { 
    int var1; 
    float var2; 
    fscanf(fp, "%d%f", &var1, &var2); 
    printf("%d\n", var1); 
    printf("%f\n", var2); 
} 
における第2フロート番号を変数Aに最初の番号(整数値)を格納し、格納します

私のプログラムはエラーは発生しませんが、すべてのデータが間違っています。 CMDでのアウトは、次のとおりです。

10 
0.900000 
1 
2.10000 
10 
10.050000 
10 
200.0000000 
10 
200.000000 

あなたが見ることができるように、いくつかのデータが間違っている、そしてそれは0 0 として空行を印刷しなかった正しい出力は次のようになります。

3 
10.9 
1 
2.1 
0 
0 
10 
10.05 
10 
200 
+0

あなたのwhileループは理にかなっていません。 –

+0

実行時エラーとは何ですか? – nicomp

+2

"%lf"と "float"を混ぜることは、幸せな人生のためのレシピではありません – kdopen

答えて

0

あなたは2つの "並行"ルーチン、すなわちfgetc(文字を読む)とfscanf(読み込まれた書式の入力)であなたの入力を読んでいます。 fgetcの部分が間違った方法で文字を消費します。

ファイルの終わりに達していないかどうかを確認したいと思ったが、それは正しい方法ではないので、あなたはそれを呼び出したと思う。

代わりにすることを行います。

while (1) { 
    int var1; 
    float var2; 
    int nb_toks = fscanf(fp, "%d%f", &var1, &var2); 
    if (nb_toks<2) break; 
    printf("%d\n", var1); 
    printf("%f\n", var2); 
} 

fscanfは、アイテムの数が正常に読み込ま返すので、あなたは、ファイルの終わりに達したとき、それはあなたがループから抜け出すことができることを意味しており、1または0を返します。

+0

@alk:それを編集しました。ループの問題で盲目になった。 kdopenはすでにそれを通知しました。 –

+0

ありがとうございます。 $ lfを%fに変更すると、今度はプログラムを実行可能にします。しかし、CMDの出力は正しくありません。 – Hugo

+0

は別の '%lf'を忘れました!何が出力されるべきですか? –

関連する問題