-PR-
締切済み

getchar,isalphaについて

  • すぐに回答を!
  • 質問No.14696
  • 閲覧数163
  • ありがとう数15
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 20% (1/5)

C言語を習いはじめてまもない者です。getcharとisalphaについて教えてください。
 まず、getcharから。この関数は、キーボードから文字を一文字ずつ読み、読み出した文字を返す。といった働きをするそうですが、この関数を用いて、取り込んだ文字をなぜか、int型で宣言した変数に代入しています。(例:int aなどのaに取り込んだ文字を代入している。)なぜ、文字を取り込んでいるのに、intで宣言した変数に代入すのでしょうか?charで宣言した変数に代入しなくていいのですか?

 次に、isalphaについてです。この関数は、変数に代入されている文字が数字か文字かを判断して、文字が入力されていると、0以外の値を返す関数だそうです。しかし、この関数も、変数の宣言がintです。なぜ、charではなくintで宣言するのでしょうか?
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1
レベル9

ベストアンサー率 34% (23/66)

EOF を返したり(getchar())、与えたり(isalpha())しなければならないからです。
EOF は通常 -1 で、これを表現するために unsigned char では足りないので int 型が用いられます。


  • 回答No.2
レベル13

ベストアンサー率 37% (570/1525)

式と評価について調べてみてください。

C言語ではchar,shortは評価段階で暗黙にintへの格上げが行われます。
unsigned char unsigned shortはunsignedに、floatはdoubleに。

「EOFのあつかい」という側面が無いわけではありませんが、C言語の「暗黙の方変換」が席にあっての話です。
charがintへ格上げされるからEOFを返すことが可能となっているのです。

C言語FAQ11.3に『古い書き方の 宣言ではdoubleを使ったほうがわかりやすい)"狭い"(char、short int、float)型は、関数引数や戻り値としては避 けたほうが安全であろう。』とあるように古いタイプ(プロトタイプ宣言の無い)のCでは関数インターフェースにcharやshortは使いませんでした。

stdio(getcharが含まれる)やtypes(isalphaが含まれる)はこの時代に定義されたものであり、関数値/引数がint以上の幅を持つことが前提となっています。

C言語FAQ日本語訳のURLを紹介します。

あと、keronpasさんのお使いの参考書にそのあたりの解説が無いのなら別の参考書を見たほうがよいでしょう。
ウチのページでC/プログラミングの書籍を紹介していますので参考にしてください。
http://www.geocities.co.jp/SiliconValley-PaloAlto/6362/
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ