0

私はポインターを理解しています (私はそう思います)。また、C の配列がポインターとして渡されることも知っています。これはコマンドライン引数にも当てはまるとmain()思いますが、私の人生では、次のコードを実行するときにコマンドライン引数を単純に比較することはできません。

#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

最後の比較 (文字の一致のチェック) を除いて、すべての比較が機能します。引数として「B」、「b」などを訴える2番目の比較で行ったように使用しようとしstrcmp()ましたが、うまくいきませんでした。args[4][0]私もaにキャストしようとしましたが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 で何かを書いたのは 1 年前のことですが、文字の操作に苦労したことを覚えていますが、その理由はわかりません。私が見逃している明らかなことは何ですか?

質問: 値を文字と比較するにはどうすればよいですかargs[4](つまり、args[4] != 'B' _または_ args[4][0] != 'B')。私は少し迷っています。

4

1 に答える 1

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')
于 2013-09-23T06:48:47.667 に答える