首先,我正在談論使用gcc編譯的舊式ANSI-C(我的意思是ANSI標準,沒有C99或更新版本)。我只允許使用下面代碼中可以看到的庫。如何檢查命令行參數是否爲整數
我的問題是我有一個被稱爲以如下方式對終端程序:
program < integer_1 integer_2
雖然我已經能夠找出如何檢查參數的數目,我被困在檢查這些是否是整數。 如果程序被稱爲像這樣:
program < 1 -13
它應該運行沒有抱怨,但如果像這樣運行:
program < s 7
應該拋出一個錯誤。
無論我到目前爲止嘗試過的是完全垃圾。如果第二個數字是一個字符,我迄今爲止管理的最好的事情就是一個錯誤消息。我的嘗試中沒有一個能夠處理多個數字,但我已經找到了原因。
問題是我現在還沒有使用任何編程語言的命令行/終端參數(C++,Java)。我真的很感激,如果有人能告訴我如何檢查正確的輸入,坦白地說,我是出於想法。
我正確的說,如果我想處理大於9的數字,我必須從索引2開始遍歷argv,直到找到空格爲止?
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(int arc, char *argv[])
{
if(arc != 3)
{
printf("Error: You have entered %d arguments, but two were expected!", arc - 1);
return -1;
}
return 0;
}
所有的命令行參數都是字符串。你可以使用'atoi()'將字符串轉換爲整數,而不需要檢查錯誤,或者使用'strtol()'或它的一個親屬來準確敏感但非常[微妙的錯誤檢查](http://stackoverflow.com/questions/14176123 /正確的用法 - 的 - 與strtol)。注意你的命令行顯示了一個'<',這意味着shell試圖使用下一個參數(例子中的'1'和's')給出的文件重定向標準輸入,並刪除'<'和命令行中的文件名。您應該簡單地刪除'<'符號。 –