2016-11-12 166 views
-1

用-l表示最大值,-s表示最小值,如果用戶輸入無效選項,程序應該顯示錯誤信息。我必須編碼運作。指針和整數比較警告C

當前錯誤是第一個和第二個if()語句內指針和整數的比較。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char *numbers[]) 
{ 
     //variables needed 
     int i,temp,max,min; 

     //find largest (-1) 
     if (!(strcmp(numbers[1],"-1"))) 
     { 
      max = atoi(numbers[2]); 
      for (i=2;i<argc;i++) 
      { 
        if(numbers[i] >= 'a' && numbers[i] <= 'z') 
        { 
          printf("bad input"); 
        } 
        else if(numbers[i] >= 'A' && numbers[i] <= 'Z') 
        { 
          printf("bad input"); 
        } 
        else 
        { 
          temp = atoi(numbers[i]); 
          if (max<temp) 
          { 
            max = temp; 
          } 
        } 
      } 
      //output after loop 
      printf("\nThe largest number is %d\n",max); 

    } 
    else if (!(strcmp(numbers[1],"-s"))) 
    { 
      min = atoi(numbers[2]); 
      for (i=2;i<argc;i++) 
      { 
        temp = atoi(numbers[i]); 
        if (min>temp) 
        { 
          min = temp; 
        } 
      } 
      printf("\nThe smallest number is %d\n",min); 
    } 
    else 
    { 


    } 
    return 0; 
} 
+0

那麼,你想通過'numbers [i]> ='a''比較來實現什麼?它應該與什麼比較? – AnT

回答

1

numbers [i]是一個指針。您無法將數字[i]與單個字符進行比較。

+0

你當前的編譯器錯誤來自將字符指針傳遞給字符。在第一步中解決編譯器錯誤:將if外殼中的所有數字[x]重命名爲numbers [x] [0]。 –

2

的char *號[]

numbers是指針數組爲char(注意:[]的優先級高於* - 所以這就是爲什麼它是數組指針),所以比較if(numbers[i] >= 'a' && numbers[i] <= 'z')沒有意義。

你需要的是if(numbers[i][0] >= 'a' && numbers[i][0] <= 'z')。同樣對於以下情況,它應該是if(numbers[i][0] >= 'A' && numbers[i][0] <= 'Z')。因爲char *numbers[]是指向char的指針數組,因此numbers[i]是指向char的指針,所以第一個字符可以通過numbers[i][0]訪問