5

私はこの一般的な方法でフォーマットされたファイルを読み込もうとしています:

Text Description: 12
Description2: 1
More descriptive things: 6

そして、12、1、6の数字を変数に読みたいと思います。

私はこのようなコードを試しました:

fscanf(fptr, "Text Description:%d",&desc1);
fscanf(fptr, "Description2:%d",&desc2);
fscanf(fptr, "More descriptive things:%d",&desc3);

しかし、何らかの理由で、最初の変数のみが入力されています。なぜこれが当てはまるのか誰かが知っていますか?

4

2 に答える 2

1

文字列形式の先頭にスペースを追加して、改行の問題を回避します

fscanf(fptr, " Text Description:%d",&desc1);
fscanf(fptr, " Description2:%d",&desc2);
fscanf(fptr, " More descriptive things:%d",&desc3);
于 2013-03-08T16:59:23.667 に答える
0

12 を処理した後は改行を読んでいないため、他の 2 つの呼び出しは文字列または整数の代わりに改行を検出しているため、失敗しています。次のfscanf呼び出しでスペースを使用できます (一致させたい文字列の前にあるすべての空白文字を消費します)。fgetcまたは、各行が改行ですぐに終了する限り、への呼び出しでそれを消費することもできます。

fscanf(fptr, "Text Description:%d",&desc1);
fgetc(fptr); // drop the next character
fscanf(fptr, "Description2:%d",&desc2);

整数の後から次の '\n' までのすべてのストリーム入力を削除するには、代わりにループを使用します。

while (fgetc(fptr) != '\n')
   ;
于 2013-03-08T16:58:38.823 に答える