1

私は、fscanfを使用してアプリケーションの入力ファイルを読み取ろうとしています。

これは入力ファイルです

3
Process#1 - 2Kb
3
exec 20

io 5

exec 50

Process#2 - 8Kb

1

exec 100

Process#3 - 8Kb

4

exec 50

io 50

exec 50

io 50

まず最初の「3」を読みたいのですが、問題ありません。

その後、#(1)の後の情報と "kb"文字列(2)の直後の数字を読み取る必要があります。

このfscanfが失敗するのはなぜですか?

fscanf(inputFile, "Process#%d - %dKb", &id, &mem ); 

どうすればいいですか?

前もって感謝します

4

1 に答える 1

3

おそらく、後に残された改行がin3によって認識されていないためです。PProcess

これが多くの人が避ける理由scanf()です; 通常は、fgets()または関連する関数(ただし、 !ではない )を使用してから、を使用する方が簡単です。gets()sscanf()


デモコード

からの戻りの厳密なチェックに注意してくださいscanf()。そうしないと、いつ問題が発生したかわかりません。正しいコンバージョン数もチェックされることに注意してください。

#include <stdio.h>
int main(void)
{
    int i;
    int id;
    int mem;

    if (scanf("%d", &i) != 1)
        printf("oops!\n");
    /* With    space - reads past newline on first line */
    /* Without space - prints 'thank goodness!' */
    if (scanf(" Process#%d - %d", &id, &mem) != 2)
        printf("thank goodness!\n");
    return 0;
}
于 2012-07-01T02:46:27.700 に答える