1

テキスト ファイルの読み取り時に fscanf が正常に動作しないという問題が発生しています。

私のテキストファイルは次のとおりです(すべての文字の前に[スペース]があります):

 L 10,4 
 S 18,4
 L 20,4
 S 28,4
 S 50,4

私がやりたいことは、各行を読み取り、値をメモリに保存することです。ただし、今のところ、while ループを使用するときに発生しているこの問題を解決したいだけです。基本的に 1 行に 2 つの出力が得られますが、その理由がわかりません。

これが私のコードです:

FILE *tFile = fopen(tracefile, "r");
int address, size;
char operation;
char comma;
printf("START \n");
while(fscanf(tFile, "%c %x %c %d", &operation, &address, &comma, &size) > 0){
    printf("O: %c", operation); 
    printf("\n");
    printf("A: %x", address); 
    printf("\n");
    printf("C: %c", comma); 
    printf("\n");
    printf("S: %d", size); 
    printf("\n");

}
printf("END \n");
fclose(tFile);

最後に、私の出力は

START
O:
A: 0
C:
S: 4195731
O: L
A: 10
C: ,
S: 4
O:
A: 10
C: ,
S: 4
O: S
A: 18
C: ,
S: 4
O:

A: 18
C: ,
S: 4
O: L
A: 20
C: ,
S: 4
O:

A: 20
C: ,
S: 4
O: S
A: 28
C: ,
S: 4
O:

A: 28
C: ,
S: 4
O: S
A: 50
C: ,
S: 4
O:

A: 50
C: ,
S: 4
END

助けてくれてありがとう。

4

2 に答える 2

1

フォーマット文字列は、ファイルのフォーマットと正確に一致する必要があります。そうしないと、間違った文字が%cs に読み込まれます。

  • 各行の先頭にスペースがあるため、形式にもスペースが必要です
  • 最初の数字とコンマの後にスペースがないため、形式にもそのスペースがあってはなりません。
  • 先頭のスペースが許可されているため、コンマの後のスペースは残る場合がありますが%d、そのスペースを削除しても問題はありません。

これで問題が解決するはずです:

while(fscanf(tFile, " %c %x%c%d", &operation, &address, &comma, &size) > 0) ...

注:はunsigned int%xへのポインターを想定しているため、予想される型に一致するように の宣言を変更する必要があります。address

ideone のデモ

于 2013-10-05T23:03:32.310 に答える
0

ファイルに書かれているものと同様の形式で出力するL 10,4必要があります%c %d,%dfscanf(tFile, " %c %d,%d", &operation, &address, &size)fscanf(tFile , " %c %d%c%d" , &operation , &address , &comma , &size)

于 2013-10-05T23:08:19.240 に答える