2

申し訳ありませんが、私は c が初めてで、これらのデータを txt ファイルから読みたいと思っています。

A 7
c 5
y 6
U 9
j 4
Z 3
z 5
0

ここに私のコードがあります

 while(feof(input)==0){
    char c;
    int num;
    fscanf(input,"%c%d",&c,&num);
    printf("%c:%d\n",c,num);
}

しかし、コンソールの結果はtxtファイルと同じではありません。結果は

ファイルを開く

A:7

:7
c:5

:5
y:6

:6
U:9

:9
j:4

:4
Z:3

:3
z:5

:0

私のコードは正しいですね。

4

3 に答える 3

8
fscanf(input,"%c%d",&c,&num);

私のコードは正しいですね

あなたは改行を食べていません。それを次のように変更します。

fscanf(input,"%c%d ",&c,&num);
                  ^

説明として、各行は文字で終わり'\n'ます。あなたがそれについて何もしなければ、%cはそれを読もうとしますが、混乱する結果が得られます。安価なトリックはfscanf、いくつかの後にすべての空白を食べさせる空白スペースを追加すること%c%dです。

編集

Peter Kowalski からのコメントに照らして:

fscanf(input,"%c %d ",&c,&num); ではないでしょうか。? %c と %d の間にスペースを追加しました

これはとても良い質問です。これは、先頭のスペースを無視する%d指定子の 1 つです。ストリームに空白がいくつあっても、それらを食べて破棄します。したがって、前の空白は暗黙的です。scanf%d

于 2012-08-26T16:31:48.843 に答える
5

また、改行を食べる必要があります。

fscanf(input,"%c%d\n",&c,&num);
于 2012-08-26T16:32:47.917 に答える
2

簡単な修正:printf()ステートメントを次のように調整するだけです

 printf("%c:%d\n",c,num);

 printf("%c %d",c,num);

current を調整するなど、他の方法がありますscanf()。これは、ソースの問題を修正するため、より優れています (改行を読んで保持しています)。

または、コンポーネントに解析せずに行全体を読み取って印刷することもできます。

于 2012-08-26T16:31:20.617 に答える