2017-05-09 31 views
1

如何驗證用戶是否僅從命令行向getopt選項傳遞了整數值?用戶應該只傳遞正整數值。整數值和負值的getopt錯誤處理

Isdigit()函數在這裏無法正常工作。

   case 's' : 
        flags=1; 

        start = atoi(optarg); 

如何檢查開始是否只包含整數值?

   ./prog -scf 

默認情況下,其採取的價值爲0時輸入任何字符,因爲我使用的atoi功能,但實際上這裏作爲CF獲得通過,也應該給錯誤。

即使試圖與strtol(),但沒有用

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

即使我使用與strtol()函數,它只能如果兩個數字和字符串傳遞。

  eg ./prog -s5abc  --> this works 

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

這裏再次開始需要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*