回答編集履歴
1
訂正追記
answer
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
#include <stdlib.h>
|
6
6
|
|
7
7
|
int chk_num(char *p){
|
8
|
-
return strlen(p)==strspn(p,"0123456789");
|
8
|
+
return *p && strlen(p)==strspn(p,"0123456789");
|
9
9
|
}
|
10
10
|
|
11
11
|
void main( int argc, char *argv[] ){
|
@@ -26,4 +26,29 @@
|
|
26
26
|
|
27
27
|
}
|
28
28
|
```
|
29
|
+
|
29
|
-
なお、質問文のプログラムでは`atof`関数の戻り型が宣言されていないので、`int`と見なされ、期待通りに動作しません。
|
30
|
+
なお、質問文のプログラムでは`atof`関数の戻り型が宣言されていないので、`int`と見なされ、期待通りに動作しません。
|
31
|
+
|
32
|
+
追記:
|
33
|
+
ああ、これだと符号とか小数点、指数を許容しませんね。他の方の回答のように`strtof`を使って、さらに後続文字が無いことを確認すればいいかと。
|
34
|
+
```C
|
35
|
+
#include <stdio.h>
|
36
|
+
#include <stdlib.h>
|
37
|
+
|
38
|
+
void main( int argc, char *argv[] ){
|
39
|
+
double p,q;
|
40
|
+
char *w;
|
41
|
+
|
42
|
+
p = strtof(argv[1],&w);
|
43
|
+
if(argv[1]==w || *w){
|
44
|
+
fprintf(stderr,"'%s' is not number\n",argv[1]);
|
45
|
+
exit(1);
|
46
|
+
}
|
47
|
+
q = strtof(argv[2],&w);
|
48
|
+
if(argv[2]==w || *w){
|
49
|
+
fprintf(stderr,"'%s' is not number\n",argv[2]);
|
50
|
+
exit(1);
|
51
|
+
}
|
52
|
+
}
|
53
|
+
```
|
54
|
+
ifの条件は、「数値以外があればエラー」なら`*w`だけでもいいのですが、それだと空文字列(ゼロに変換される)を許容するので、空文字列もエラーにするなら、`argv[1]==w`もしくは`!*argv[1]`の条件も必要です。
|