[英]Parsing command line using argv and argc in C
我試圖找出如何從命令行獲取命令,以及何時獲取該命令執行某種方法。 我無法讓代碼識別輸入的值。 有任何想法嗎?
getopts,fgets或任何類似的東西都沒有用。
int main(int argc, char *argv[]){
int i = 1;
while((argc > 1) && (argv[i] != "d")) {
switch (argv[i]) {
case: "a":
callMethodA(atoi(argv[i+1]));
break;
case: "b":
callMethodB(atoi(argv[i+1]));
break;
case: "c":
callMethodC(atoi(argv[i+1]));
break;
default:
printf("command not recognized");
}
argc++
i+=2;
}
假設發生的是輸入為:
a 3 5 1 b 2 1 c 4
它會調用函數callMethodA(),參數int為3,所以
callMethodA(3);
callMethodA(5);
callMethodA(1);
callMethodB(2);
callMethodB(1);
callMethodC(4);
編輯來自PureW的建議
int i = 1;
while((argc > 1) && (strcmp(argv[i], "d") != 0)) {
if(strcmp(argv[i], "a")) callMethodA(atoi(argv[i+1]));
else if(strcmp(argv[i], "b")) callMethodB(atoi(argv[i+1]));
else if(strcmp(argv[i], "c")) callMethodC(atoi(argv[i+1]));
argc++;
i+=2;
}
對命令的順序或值cal的數量沒有限制
argv
是一個char指針的向量。 所以每個argv[i]
實際上都是一個內存地址。 由於您要比較內存位置,因此argv[1] == "a"
進行常規比較將不起作用。
你想要做的是使用strcmp(argv[1], "a")
。 http://www.cplusplus.com/reference/cstring/strcmp/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.