0

このコードの間違いを説明できる人はいますか?

#include<stdio.h>
int main() {
  FILE *f1;
  char c;
  f1 = fopen("INPUT", "w");
  while((c=getchar()) != '/')
    putc(c, f1);
  fclose(f1);
  f1 = fopen ("INPUT", "r");
  while ((c = getc(f1) != EOF))
    printf("%c", c); 
  fclose(f1);
}

出力が検出できないフォントで表示されます。Windowsでも試しました。でも同じ結果。

4

1 に答える 1

2

まず、ではなく であるc必要があります。putc() は を取り、さらに重要なことに、getc() はストリームから次の文字を読み取り、それを、またはファイルの終わりまたはエラーの EOFへのキャストとして返します。代わりに に格納すると、が狭すぎてそれを表すことができないため、失われます。getc()intcharintunsigned charintcharEOFchar

第二に、これは間違っています:

while ((c = getc(f1) != EOF))

ここで必要なのは次のとおりです。

while ((c = getc(f1)) != EOF)

括弧の位置が間違っています。

cは次のようになっているため、printf() 呼び出しを変更する必要があることに注意してくださいint

printf("%c", (char)c);

printf() は可変引数関数であり、コンパイラは自動型変換を実行しないため、明示的なキャストが必要です。可変引数関数を使用して手動でキャストする必要があります。

于 2013-02-25T14:12:16.077 に答える