• ベストアンサー

isdigitの挙動について

#include <iostream> #include <ctype.h> using namespace std; int main() { int i = 100; if (isdigit(i)){ cout << "true"; }else{ cout << "false"; } return 0; } というプログラムを実行したのですが、falseが標準出力に表示されます。 i=100なので、isdigitでtrueが返ってくるのだと思っていたのですが、なぜfalseが帰ってくるのでしょうか?? どなたか詳しい方いらっしゃったらご教示いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

私はC++初心者です。 http://f4.aaa.livedoor.jp/~pointc/104/No.25562.html#25565 >isdigit( 1 ) とすると 1 という【文字コードが】数字を表す文字かを判定します。 ASCIIコードである場合 48~57の時 0以外がかえるようになっています 引数がint型なのでchar型を指定したらキャストされるんでしょうなあ

その他の回答 (3)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.4

>i=100なので、isdigitでtrueが返ってくるのだと思っていたのですが、なぜfalseが帰ってくるのでしょうか?? i=100でtrueなら、いったいiがいくつならfalseになるんでしょうか? そういったことに疑問を感じるかどうかということも、プログラマと しての大切な素養ですよ。

miraikako
質問者

お礼

回答くださった方、ありがとうございましたm(_ _)m とても参考になりました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

環境が不明なので正確なことはいえませんが、ISO 646やその上位互換の文字コードの場合、'0'~'9'は48~57であり、その範囲でなければisdigitが真を返すことはありません。それに対して、100は'd'ですから必ず偽になります。 実引数の型をcharにしても同じです。

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

isdigitってのは、*単一の文字*が数字かそうでないかを調べるものです。 ここで数字というのは、'0','1','2', '3', '4', '5', '6', '7', '8', '9'のことであり、これ以外は全部falseです。 # ASCIIコードを想定すると'0'~'9'間が48~57、'0'=48≠0です。 100と書いた場合、ASCIIでは'd'を表すので数字ではありません(英字です)。