質問: C言語でコマンドラインからの入力において、文字列か数値かを識別したい。 コマンドラインから入力された値を使って数値計算を行うプログラムを書いているのですが、通常、コマンドラインからの入力では、char型になると思います。そこで ``` #include void main( int argc, char *argv[] ){ double p,q; p=atof(argv[1]); q=atof(argv[2]); } ``` といった具合に無理やりatofで実数にかえます。このとき、コマンドラインに ./a.out abv axa のように実数に変換不可能な値をいれてしまった場合にはpもqも0になると思いますが、これでは ./a.out 0 0 と入力した時と区別がつきません。 実数に変換不可能な値を入力した場合において"無効です"というようなメッセージを表示させるにはどうしたらよいでしょう
回答: `atof`でなく`strtof`を使えば、「0が入力された場合」と「変換に失敗した場合」を区別することができます(man)。 ``` char * input = /*何かしらの文字列*/; char * check_ptr; float val = strtof(input, &check_ptr); if(input == check_ptr){ /* 1文字も変換できなかった場合 */ } else { /* valに値が取れた場合 */ } ``` なお、`atof`も`strtof`も、`1zz`のような「数字から始まる文字列」の場合、数字だけ見て「1」を返しますので、そのあたりはご了承下さい。