回答編集履歴
1
訂正追記
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
int chk_num(char *p){
|
14
14
|
|
15
|
-
return strlen(p)==strspn(p,"0123456789");
|
15
|
+
return *p && strlen(p)==strspn(p,"0123456789");
|
16
16
|
|
17
17
|
}
|
18
18
|
|
@@ -54,4 +54,56 @@
|
|
54
54
|
|
55
55
|
```
|
56
56
|
|
57
|
+
|
58
|
+
|
57
59
|
なお、質問文のプログラムでは`atof`関数の戻り型が宣言されていないので、`int`と見なされ、期待通りに動作しません。
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
追記:
|
64
|
+
|
65
|
+
ああ、これだと符号とか小数点、指数を許容しませんね。他の方の回答のように`strtof`を使って、さらに後続文字が無いことを確認すればいいかと。
|
66
|
+
|
67
|
+
```C
|
68
|
+
|
69
|
+
#include <stdio.h>
|
70
|
+
|
71
|
+
#include <stdlib.h>
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
void main( int argc, char *argv[] ){
|
76
|
+
|
77
|
+
double p,q;
|
78
|
+
|
79
|
+
char *w;
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
p = strtof(argv[1],&w);
|
84
|
+
|
85
|
+
if(argv[1]==w || *w){
|
86
|
+
|
87
|
+
fprintf(stderr,"'%s' is not number\n",argv[1]);
|
88
|
+
|
89
|
+
exit(1);
|
90
|
+
|
91
|
+
}
|
92
|
+
|
93
|
+
q = strtof(argv[2],&w);
|
94
|
+
|
95
|
+
if(argv[2]==w || *w){
|
96
|
+
|
97
|
+
fprintf(stderr,"'%s' is not number\n",argv[2]);
|
98
|
+
|
99
|
+
exit(1);
|
100
|
+
|
101
|
+
}
|
102
|
+
|
103
|
+
}
|
104
|
+
|
105
|
+
```
|
106
|
+
|
107
|
+
ifの条件は、「数値以外があればエラー」なら`*w`だけでもいいのですが、それだと空文字列(ゼロに変換される)を許容するので、空文字列もエラーにするなら、`argv[1]==w`もしくは`!*argv[1]`の条件も必要です。
|
108
|
+
|
109
|
+
|