- ベストアンサー
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が帰ってくるのでしょうか?? どなたか詳しい方いらっしゃったらご教示いただけると幸いです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
私は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)
>i=100なので、isdigitでtrueが返ってくるのだと思っていたのですが、なぜfalseが帰ってくるのでしょうか?? i=100でtrueなら、いったいiがいくつならfalseになるんでしょうか? そういったことに疑問を感じるかどうかということも、プログラマと しての大切な素養ですよ。
- jacta
- ベストアンサー率26% (845/3158)
環境が不明なので正確なことはいえませんが、ISO 646やその上位互換の文字コードの場合、'0'~'9'は48~57であり、その範囲でなければisdigitが真を返すことはありません。それに対して、100は'd'ですから必ず偽になります。 実引数の型をcharにしても同じです。
- MrBan
- ベストアンサー率53% (331/615)
isdigitってのは、*単一の文字*が数字かそうでないかを調べるものです。 ここで数字というのは、'0','1','2', '3', '4', '5', '6', '7', '8', '9'のことであり、これ以外は全部falseです。 # ASCIIコードを想定すると'0'~'9'間が48~57、'0'=48≠0です。 100と書いた場合、ASCIIでは'd'を表すので数字ではありません(英字です)。
お礼
回答くださった方、ありがとうございましたm(_ _)m とても参考になりました。