2016-10-28 30 views
-1

我正在使用C中的某個項目。到目前爲止,我所做的是我從命令行讀取參數並返回最小或最大數目。例如:在命令行中定義輸入的類型

./find -m -M 1 3 4 5 
The smallest number is: 1 
The biggest number is 5 

我想要做的就是添加標誌「T」(在開關罩「T」),所以,當我運行該腳本,我可以整數和浮點數之間進行選擇。例如:

./find -m -t float 1.2 4.5 1.9 2.3 
The smallest number is: 1.2 

或者與整數相同的東西。

感謝您的幫助。

短格式化代碼:

int main(int argc, char *argv[]){ 
int array[30]; 

int x = 0; 
while ((x = getopt(argc, argv, "htm")) != -1) 
{ 
    switch(x) 
    { 
    case 'h' : 
     printf("Help.\n"); 
     break; 
    case 't': 
     break; 
    case 'm' : 
     for(int a = optind; a < argc; a++) 
     { 
      array[a] = atoi(argv[a]); 
     } 
     for (int i = optind; i < argc; i++) 
     { 
      for (int j = optind; j < argc - 1; j++) 
      { 
       if (array[j] > array[j + 1]) 
       { 
        int temp = arrray[j]; 
        array[j] = array[j + 1]; 
        array[j + 1] = temp; 
       } 
      } 
     } 
     printf("The smallest one: %d\n", array[optind]); 
     break; 
    } 
} 
return 0; 
} 
+1

所以你的問題真的是:「如何處理命令行選項在C?「這裏使用的標準函數是'getopt'。這應該讓你開始。 –

+0

@JonathonReinhart我在'while使用getopt((x = getopt(argc,argv,「htmM」))!= -1)' – HC1122

+0

這就是爲什麼你應該發佈你的代碼。 –

回答

0

一個非常快速的解決辦法是這樣的:

int type = 0; 

// parse the arguments 
if (argc > 1){ 
    for (int i = 0; i < argc; i++){ 
     if (!(strcmp(argv[i],'-t'))) 
      if (!(strcmp(argv[i+1],'float'))) 
       type = 1; 
    } 
} 

然後檢查類型爲0使用int或者如果它是1間使用浮動。 這不太好,你當然需要一些檢查,而不是盲目地採取argv [i + 1],但它很容易寫和它的作品(減去也許一些錯別字,因爲我寫它很快)

p.S.我從來沒有使用getopt,但它可能會更容易,因爲你不需要使用strcmp

此外,交換機只能用於字符,以便在必須使用的字符串上使用它在字符串[0]上使用它,但是你會接受以「i」或「f」開頭的每一個字符串,不僅是「int」和「float」