C言語の<ctype.h>のisspace()について教えてください。
まだ初心者なので、変な質問でしたらすみません。
ライブラリで用意されているisspace()関数があります。
空白類の文字判定を行えるとあり、引数はint型で指定することになっています。
そこで疑問なのですが文字列をgetcで取ってきた時にcはEOFの時にマイナスを取るわけですが、問題ないのでしょうか?
例えば
int c;
while( !isspace( c = getc( fp )) && c != EOF ){・・・
getcを(unsigned char)ででもキャストすると解消するとは思いますが、問題ないのならば加えたくありません・・。以上ですが、分かりにくい説明でご迷惑おかけします。
よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
> そこで疑問なのですが文字列をgetcで取ってきた時にcはEOFの時にマイナスを取るわけですが、
> 問題ないのでしょうか?
K&R 2 によると,
「各関数に対し,引数は int で与える。
その値は EOF か,あるいは unsigned char として表現できるものでなければならず,
戻り値は int となる。」
とありますから問題ないでしょう。(「各関数」というのは ctype.h で宣言された各関数のことです。)
心配なら先に EOF でないことをチェックしておけばいいです。
No.2
- 回答日時:
こんにちは。
どこがわかりませんか?getc のプロトタイプ宣言はint getc(FILE *stream)
ですから、ファイルストリームから読み込んだ
文字コードの値を int にキャストして戻してくれるわけです。
ですからキャストの必要はありません、というか EOF との比較ができなくなりますので
してはいけません。
また int は符号付き(signed)ですから、EOF(普通は -1)も楽に格納できます。
早急なご回答どうもありがとうございます。
すみません、主旨がわかりにくい質問ですよね・・。
isspace()の引数に-1を入れてもいいのかどうかが疑問でした。。。失礼しました^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語の質問です、プログラミング初心者です このような文字列があった場合 "abcdef☆ghijk 4 2022/11/22 10:56
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2重定義って??
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
ハンドルされていない例外が発...
-
typedef enumの使い方を教えて...
-
visualstudio C# テキストボッ...
-
C言語 宣言した変数になにも代...
-
プログラムの中で別のmainを呼...
-
構造体を引数とする、クラス間...
-
enumについて
-
Arduinoのプログラムについて
-
C++/CLIでネイティブの構造体を...
-
変数の型を定義しなかった場合...
-
C++の(左辺値)参照を参照渡し
-
int void (main)の意味・・・
-
C++のfor文について
-
gccのエラー "initialization d...
-
LNK2019: 未解決の外部シンボル...
-
C言語での方向キー入力判定
-
関数の実体定義にヘッダファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
関数の実体定義にヘッダファイ...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
【#define】 defineで定義した...
-
void func( void )について
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
C++の(左辺値)参照を参照渡し
-
main()とint main(void)の違い
-
intとINTの違いは?
-
DLLでLIBファイルが作成されない
おすすめ情報