Проверка того, не является ли какой-либо символ в аргументе командной строки "1" или "0" в C
Часть программы, которую я пишу, ожидает двоичное число в аргументе командной строки и возвращает его значение в виде десятичного числа. Часть программы проверяет, является ли аргумент командной строки фактическим двоичным числом (то есть оно не содержит цифр 2-9). Это казалось относительно простым для реализации, но по какой-то причине это не работает:
int i;
for (i = 0; i < strlen(argv[3] - 1); i++)
{
if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '\0')
{
printf("arg[3][%d]: %c\n", i, argv[3][i]);
printf("ERROR: argument 3 is not a binary integer\n%);
return 0;
}
}
(argv [3] - это аргумент, в котором предполагается использовать двоичное значение).
Даже если я просто укажу аргумент "0001", он вернется:
"arg [3] [0]: 0
ОШИБКА: аргумент 3 не является двоичным целым числом "
Остальная часть кода работает нормально, поэтому я знаю, что это просто что-то очевидное, что я не вижу в логике в операторе if. Любая помощь?
1 ответ
Линия:
if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '\0')
всегда будет решаться на истину. Вы должны использовать &&
для AND, а не ||
для ИЛИ.
Кроме того, у вас была ошибка с strlen(argv[3]-1);
, Я предполагаю, что вы на самом деле имели в виду strlen(argv[3])-1;
, так как первый будет указывать на плохое место в памяти. Однако второй вам тоже не нужен, так как он пропустит последний символ.
Ниже приведен код, модифицированный для работы:
#include <stdio.h>
#include <string.h>
int main( int argc, char** argv )
{
int i;
for (i = 0; i < strlen(argv[3]); i++)
{
if (argv[3][i] != '0' && argv[3][i] != '1' && argv[3][i] != '\0')
{
printf("arg[3][%d]: %c\n", i, argv[3][i]);
printf("ERROR: argument 3 is not a binary integer\n");
return 0;
}
}
return 0;
}