2013-09-23 136 views
0

我理解指針(我認爲),並且我知道C中的數組作爲指針傳遞。我假設這適用於main()命令行參數爲好,但對我的生活,當我運行下面的代碼,我不能做的命令行參數的簡單比較:與C命令行參數

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

int main(int numArgs, const char *args[]) { 

    for (int i = 0; i < numArgs; i++) { 
     printf("args[%d] = %s\n", i, args[i]); 
    } 

    if (numArgs != 5) { 
     printf("Invalid number of arguments. Use the following command form:\n"); 
     printf("othello board_size start_player disc_color\n"); 
     printf("Where:\nboard_size is between 6 and 10 (inclusive)\nstart_player is 1 or 2\ndisc_color is 'B' (b) or 'W' (w)"); 
     return EXIT_FAILURE; 
    } 
    else if (strcmp(args[1], "othello") != 0) { 
     printf("Please start the command using the keyword 'othello'"); 
     return EXIT_FAILURE; 
    } 
    else if (atoi(args[2]) < 6 || atoi(args[2]) > 10) { 
     printf("board_size must be between 6 and 10"); 
     return EXIT_FAILURE; 
    } 
    else if (atoi(args[3]) < 1 || atoi(args[3]) > 2) { 
     printf("start_player must be 1 or 2"); 
     return EXIT_FAILURE; 
    } 
    else if (args[4][0] != 'B' || args[4][0] != 'b' || args[4][0] != 'W' || args[4][0] != 'w') { 
     printf("disc_color must be 'B', 'b', 'W', or 'w'"); 
     return EXIT_FAILURE; 
    } 

    return EXIT_SUCCESS; 
} 

以下參數:othello 8 0 B

所有的比較工作除了最後 - 檢查字符匹配。我嘗試使用strcmp(),就像我在第二次比較中所做的那樣,將「B」,「b」(等等)作爲參數,但那不起作用。我也嘗試將args[4][0]改爲char,那也沒有奏效。我嘗試瞭解引用args[4],並且我也嘗試了將該值進行鑄造。

輸出

args[0] = C:\Users\Chris\workspace\Othello\Release\Othello.exe 
args[1] = othello 
args[2] = 8 
args[3] = 1 
args[4] = B 
disc_color must be 'B', 'b', 'W', or 'w' 

我真不明白這是怎麼回事。上次我用C語言寫了一些東西是在一年前,但是我記得操縱角色有很多麻煩,我不知道爲什麼。我錯過了什麼是顯而易見的事情?

問題:我如何在args[4]比較值的字符(即ARGS [4] = 'B' __ ARGS [4] [0] ='! B')。我只是有點失落。

+0

也許這不是一個字符串,而是一個字符。 Strcmp比較字符串。您可以使用'A'=='A'來比較字符。 – Reinherd

+0

據我所知,'args [4]'的值是一個字符串。因此,取該字符串的'index 0'值(即args [4] [0]')應該有效,因爲比較值都是字符,但似乎並非如此。 –

+0

顯然我正確地進行了比較,但是聲明的邏輯錯誤。典型的我,但感謝看看我的問題:) –

回答

1

您的代碼

else if (args[4][0] != 'B' || args[4][0] != 'b' || args[4][0] != 'W' || args[4][0] != 'w') 

將始終評估爲TRUE - 它應該是

else if (args[4][0] != 'B' && args[4][0] != 'b' && args[4][0] != 'W' && args[4][0] != 'w') 
+0

該死的......我需要重新在布爾邏輯上的類。我習慣於使用'||'來表示數字表達式,而我忘記了字符比較的目的。謝謝一堆! –