- ベストアンサー
C言語のisspace()関数についての疑問
- C言語の<ctype.h>にはisspace()関数があります。
- isspace()関数は、引数として与えられた文字が空白類の文字かどうかを判定する関数です。
- isspace()関数は、int型の引数を受け取り、その文字が空白類の文字なら非0の値を、そうでなければ0を返します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> そこで疑問なのですが文字列をgetcで取ってきた時にcはEOFの時にマイナスを取るわけですが、 > 問題ないのでしょうか? K&R 2 によると, 「各関数に対し,引数は int で与える。 その値は EOF か,あるいは unsigned char として表現できるものでなければならず, 戻り値は int となる。」 とありますから問題ないでしょう。(「各関数」というのは ctype.h で宣言された各関数のことです。) 心配なら先に EOF でないことをチェックしておけばいいです。
その他の回答 (2)
- nightowl
- ベストアンサー率44% (490/1101)
こんにちは。どこがわかりませんか?getc のプロトタイプ宣言は int getc(FILE *stream) ですから、ファイルストリームから読み込んだ 文字コードの値を int にキャストして戻してくれるわけです。 ですからキャストの必要はありません、というか EOF との比較ができなくなりますので してはいけません。 また int は符号付き(signed)ですから、EOF(普通は -1)も楽に格納できます。
お礼
早急なご回答どうもありがとうございます。 すみません、主旨がわかりにくい質問ですよね・・。 isspace()の引数に-1を入れてもいいのかどうかが疑問でした。。。失礼しました^^;
- isobeman
- ベストアンサー率41% (17/41)
isspace()の引数が対象外の値の場合は0を返すことになっているようですので、問題は無いとは思いますが。 心配でしたら、以下のように書いてみてはどうでしょうか int c; while( (c=getc(fp)) != EOF && !isspace(c) ) { ....... この場合、先に (c=getc(fp)) != EOF がFALSEになった段階で、次の !isspace(c) は評価されなくなります。
お礼
どうもありがとう御座います。 早急なお答え感謝です。
お礼
早急なご回答どうもありがとうございます。 すみません、yoppiiさんに言われた後調べたら載っていました。納得です!!