
No.4ベストアンサー
- 回答日時:
>ifの中に入らないのですが
>どうしてでしょうか?
isdigit()は「引数が'0'~'9'の範囲ならtrueを返す」つまり「引数が48~57の範囲ならtrueを返す」と言う仕様です。
atoi()は「文字列を数字の並びと解釈して、数値に変換する」と言う仕様です。
従って「atoi(s)」や「atoi("5")」は「5」を返します。
なので「isdigit(atoi(s))」や「isdigit(atoi("5"))」は「isdigit(5)」と同じです。
isdigit()は「引数が48~57の範囲ならtrueを返す」ので引数が「5」の場合はfalseを返します。
falseは0と等しいですから「(isdigit(atoi(s)) != 0)」は「(false != 0)」つまり「(0 != 0)」と同じです。
「0 != 0」の演算結果はfalseですから「if(isdigit(atoi(s)) != 0){」は「if(false){」と同じです。
if文の判定式がfalseの場合、if文に続く文は実行されません。
>atoiいれなくてもいいのか・・
>うーむ
isdigit()は「文字が'0'~'9'かどうか?」を調べるのですから、atoiで「文字列を数値にしてしまった後の値」は調べられません。
>それと文字列の最初の文字が数字かどうかの判定 をしたいのですが
>どうすればいいのか教えて下さい。
「isdigit(調べたい文字を1文字)」でOK。
文字列sの先頭の文字は「*s」または「s[0]」なので「isdigit(*s)」か「isdigit(s[0])」でOK。
No.5
- 回答日時:
処理系不明なので断定的なことはいうべきではありませんが...
すでに回答が出ているように、atoi(s)は整数値の5を返します。
この5が、'0'~'9'のいずれかの数字に該当すれば、isdigitは真を返します。今回はそうではなかったということでしょう。
なお、'0'がどんな値になるかは処理系に依存します。
標準規格で保証されているのは、'0'~'9'が連続した整数値であること、および'0'~'9'の値が正であることだけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
シリアル通信で0x00を送信した...
-
5
C++で文字列の右端から特定の文...
-
6
_tcscpy_s(wcscpy_s)の第二引数...
-
7
アルファベットをカウント、
-
8
WSH(VBS)でJSONの文字列を読み...
-
9
数字の入った配列をファイルへ...
-
10
%dなどの違い
-
11
アルファベットの出て来た回数
-
12
文字列を操作するプログラムで...
-
13
文字列にある特定文字の数
-
14
char型配列の最大要素数
-
15
c言語によって文字列を逆順する...
-
16
16進数を2文字ずつ配列に格納し...
-
17
VBA-DLLの引数受け渡しについて
-
18
sprintf関数での文字列変換につ...
-
19
C言語の課題で困っています;
-
20
Shift_JIS(16進)を文字に変換す...
おすすめ情報
公式facebook
公式twitter