charではダメ、intでないとことたりない

[戻る]
ケイブ 2002/03/17(日) 16:15:22
http://www.hlla.is.tsukuba.ac.jp/~yas/coins/syspro-2000/2000-04-24/file-lib.html
のサイトに書いてあったのですが、
  34:    void filter_char_upper( FILE *in, FILE *out )
  35:    {
  36:        int c ;     /* int型。char は、不可 */
  37:            while( (c=getc(in)) != EOF )
  38:            {
  39:                putc( toupper(c),out );
  40:            }
  41:    }
のように、int c; で宣言しています。
どうしてcharだとダメなのですか?

TAD [E-Mail] 2002/03/17(日) 20:15:54
ファイルの終端を判別するためだと思います。

関数が成功すれば、0x00〜0xff の値が返りますが、
エラーが発生すると、EOF(-1) を返します。

これが int ではなく char で受け取ると、0xff と EOF が同じになってしまい、
0xff という値が読まれたのか、ファイルの終端で EOF が返されたのか、
判断が出来なくなってしまうというわけです。

ケイブ 2002/03/17(日) 23:07:36
[[解決]]
そうい理由だったんですね。
ありがとうございました。

古いスレッドには追加発言できません。