C Аргументы командной строки
Я понимаю указатели (я думаю), и я знаю, что массивы в 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
Все сравнения работают, кроме последнего - проверка на совпадение символов. Я пытался с помощью 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'
Я действительно не понимаю, что происходит. В последний раз я что-то писал на Си был год назад, но я помню, что у меня было много проблем с манипулированием персонажами, и я понятия не имею, почему. Что за очевидная вещь, по которой я скучаю?
Вопрос: Как мне сравнить значение в args[4]
символу (то есть args [4]! = 'B' _или_ args [4] [0]! = 'B'). Я просто немного растерялся.
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')