C言語の<ctype.h>のisspace()について教えてください。
まだ初心者なので、変な質問でしたらすみません。
ライブラリで用意されているisspace()関数があります。
空白類の文字判定を行えるとあり、引数はint型で指定することになっています。
そこで疑問なのですが文字列をgetcで取ってきた時にcはEOFの時にマイナスを取るわけですが、問題ないのでしょうか?
例えば
int c;
while( !isspace( c = getc( fp )) && c != EOF ){・・・
getcを(unsigned char)ででもキャストすると解消するとは思いますが、問題ないのならば加えたくありません・・。以上ですが、分かりにくい説明でご迷惑おかけします。
よろしくお願い致します。
No.2
- 回答日時:
こんにちは。
どこがわかりませんか?getc のプロトタイプ宣言はint getc(FILE *stream)
ですから、ファイルストリームから読み込んだ
文字コードの値を int にキャストして戻してくれるわけです。
ですからキャストの必要はありません、というか EOF との比較ができなくなりますので
してはいけません。
また int は符号付き(signed)ですから、EOF(普通は -1)も楽に格納できます。
早急なご回答どうもありがとうございます。
すみません、主旨がわかりにくい質問ですよね・・。
isspace()の引数に-1を入れてもいいのかどうかが疑問でした。。。失礼しました^^;
No.3ベストアンサー
- 回答日時:
> そこで疑問なのですが文字列をgetcで取ってきた時にcはEOFの時にマイナスを取るわけですが、
> 問題ないのでしょうか?
K&R 2 によると,
「各関数に対し,引数は int で与える。
その値は EOF か,あるいは unsigned char として表現できるものでなければならず,
戻り値は int となる。」
とありますから問題ないでしょう。(「各関数」というのは ctype.h で宣言された各関数のことです。)
心配なら先に EOF でないことをチェックしておけばいいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
都道府県穴埋めゲーム
都道府県の名前を1人1つずつ投稿してください。全ての都道府県が出たら締め切ります!
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
strcmp
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
visualstudio C# テキストボッ...
-
typedef enumの使い方を教えて...
-
0除算を判定したい
-
DLLでLIBファイルが作成されない
-
コンストラクタについて
-
C++のfor文について
-
DWORDの実際の型は何でしょうか
-
C++でboolにintの値を代入する...
-
vector<int> に Serialize を使...
-
仮想基底クラスをもつクラスの...
-
main.c:7:43: warning: implici...
-
二つ以上の値を返す関数
-
引数の受け渡し
-
C#について
-
相互参照するクラス、俺こんな...
-
コンパイルすると error C1083 ...
-
C言語での方向キー入力判定
-
エラー「invalid conversion fr...
-
2重定義って??
-
2÷3などの余りについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
C++のfor文について
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
typedef enumの使い方を教えて...
-
main.c:7:43: warning: implici...
-
C++でboolにintの値を代入する...
-
構造体の要素すべてに対する四...
-
intとINTの違いは?
-
ハンドルされていない例外が発...
-
DDVによるメッセージの変更
-
変数の型を定義しなかった場合...
-
【#define】 defineで定義した...
-
C++ クラスをメンバにもつクラ...
-
構造体の宣言でエラーが出ます。
-
プログラムの中で別のmainを呼...
-
void func( void )について
-
エラー「invalid conversion fr...
-
関数の実体定義にヘッダファイ...
おすすめ情報