2017-05-09 7 views
1

ユーザーがコマンドラインからgetoptオプションに整数値だけを渡したかどうかを確認する方法はありますか?ユーザーは正の整数値のみを渡す必要があります。整数値と負の値のgetoptエラー処理

ここではIsdigit()関数が正しく動作しません。

   case 's' : 
        flags=1; 

        start = atoi(optarg); 

開始に整数値のみが含まれているかどうかを確認する方法はありますか?デフォルトその撮影の値によって

   ./prog -scf 

私はATOI機能を使用していますが、ここでCFが渡されると、実際にそれがエラーを与える必要がありますので、いずれかの文字が、入力された0として。

はさえ)(strtolはしてみましたが、私はstrtolは()関数を使用する場合でも、一切使用

  start = (int) strtol(optarg, &ptr, 10); 

が、それは数や文字列の両方が渡された場合にのみ機能しません。

  eg ./prog -s5abc  --> this works 

      eg ./prog -sabc   -->does not work 

ここでもまた、チャーターだけが渡されるので、startは0の値をとります!しかし、ユーザー自身が0を渡すと、どうすればエラーを処理できますか?あなたが署名した数字で作業していると

  eg ./prog -s0  --> s takes 0 value, valid 

      eg ./prog -sabc  --> s takes 0 value , but invalid 
+0

'(開始<0){...}であれば、'? –

+0

「*が正しく動作しません」とはどういう意味ですか? – cdarke

+0

参照:[最小限の完全で検証可能なサンプルの作成方法**](http://stackoverflow.com/help/mcve) –

答えて

0

、これは実行する必要があります。

if (optarg[0] != '-' && (optarg[0] < '0' || optarg[0] > '9')) 
    *error handling* 
for (size_t i = 1; optarg[i] != 0; i++) 
    if (optarg[i] < '0' || optarg[i] > '9') 
     *error handling* 
関連する問題