2015-10-16 22 views
-2

我寫在C程序,需要幾個命令行參數。的argv [1]將是一個單個字符「選項」,無論是一個「a」或「b」或「c」的,每個選項導致程序以不同的方式運行。我想開始我的程序的main()方法來檢查if語句的命令行上指定的用戶是否選擇是正確的,即無論是一個「A」或「B」或「C」,而不是其他。使用ARG [V]的命令行參數在C程序

我的代碼:

int main (int argc, char *argv[]) 
{ 
    if (argv[1] != 'a' || 'b' || 'c') printf("Failure\n"); 
    else printf("Success\n"); 
} 

當我編譯這段代碼,我得到這樣的警告:

warning: comparison between pointer and integer 

我明白,我濫用指針字符數組,但我不」不明白我的意思。

回答

3

在表達式類型的argv[1]

if (argv[1] != 'a' || 'b' || 'c') 

char*是和的'a'類型是char,它是由編譯器變換爲int。這解釋了編譯器警告消息。

這行沒有去工作,你希望它的方式。你需要的東西,如:

if (argv[1][0] != 'a' && 
    argv[1][0] != 'b' && 
    argv[1][0] != 'c') 
{ 
    printf("Failure\n"); 
} 

爲了使程序更健壯,則需要先檢查是否有一種說法,你檢查它的內容之前。

int main (int argc, char *argv[]) 
{ 
    if (argc > 1) 
    { 
     if (argv[1][0] != 'a' && 
      argv[1][0] != 'b' && 
      argv[1][0] != 'c') 
     { 
     printf("Failure\n"); 
     } 
     else 
     { 
     printf("Success\n"); 
     } 
    } 
    else 
    { 
     printf("Failure\n"); 
    } 

    return 0; 
} 
+0

感謝錯誤的解釋,是有道理的。代碼的[0]部分是做什麼的? – freezefry

+1

@ user3413460,如果你用'program abcd'調用程序,那麼'argv [1]'是字符串'「abcd」',而'argv [1] [0]'是該字符串的第一個字符,即''a''。 –

+1

我會寫'if(argc> 1 && strlen(argv [1])> 0)'來迎合'./a.out「」'個案,儘管在這些情況下你可能會認爲argv [1] [ 0]保存'\ 0'。 –

1

有兩個問題。首先,你比較字符串(指向字符數組)的字符。這就是爲什麼你會收到警告。其次,你正在評估'b''c'爲布爾表達式。實際上,你想:

#include<stdio.h> 
#include<string.h> 
int main (int argc, char *argv[]) { 
    if ( strcmp(argv[1], "a") != 0 // strcmp returns 0 on match. 
     && strcmp(argv[1], "b") != 0 
     && strcmp(argv[1], "c") != 0) { 
     printf("Failure\n"); 
    } else { 
     printf("Success\n"); 
    } 
} 

另外,

#include<stdio.h> 
int main (int argc, char *argv[]) { 
    // the first character is between a and c inclusive and the 
    // second character is a null byte (the end of the string). 
    if ('a' <= argv[1][0] && argv[1][0] <= 'c' && argv[1][1] == 0) { 
     printf("Success\n"); 
    } else { 
     printf("Failure\n"); 
    } 
} 
1

你可以試試這個

#include <usual.h> 

int main (int argc, char *argv[]) 
{ 
    char in; 
    in=*argv[1]; 

    if (in == 'a' || in =='b' || in == 'c') printf("Success\n"); 
     else 
     printf("Failure\n"); 

}