STRCMP на числовых строках - PullRequest
       12

STRCMP на числовых строках

0 голосов
/ 02 января 2019

, поэтому у меня есть 3 переменные:

char fromAge[4];
char toAge[4];
char age[4];

Все они могут иметь число от 18 до 100 (включая 18 и 100). Когда я даю им следующие значения, по какой-то причине следующее утверждение неверно:

fromAge[4] = 18;
toAge[4] = 100;
age[4] = 25;
if (strcmp(age, fromAge) >= 0 && strcmp(age, toAge) <= 0)
{
//actions
}

Он считает, что возраст не меньше или равен возрасту. Есть предложения почему?

редактирование: Вот как я назначаю переменные, я оставляю 1 байт для '\ 0'

scanf("%s", fromAge);
scanf("%s", toAge);

и возраст 2,5, '\ 0'

Ответы [ 2 ]

0 голосов
/ 02 января 2019

strcmp сравнивает строки путем сравнения отдельных символов слева направо, и он вернется, как только два символа будут различаться.Поскольку символ '1' меньше символа '2', строка «100» будет считаться меньше строки «25».

Попробуйте этот код и введите «100» и «25»."

int main()
{
  char toAge[4] = {0};
  char age[4]={0};
  scanf("%3s", age);
  scanf("%3s", toAge);

  // Using string compare
  if (strcmp(age, toAge) < 0)
    printf("\"%s\" is less than \"%s\"\n", age, toAge);
  else if (strcmp(age, toAge) > 0)
    printf("\"%s\" is greater than \"%s\"\n", age, toAge);
  else
    printf("\"%s\" is equal to \"%s\"\n", age, toAge);

  // Using integer compare
  if (atoi(age) < atoi(toAge))
    printf("%s is less than %s\n", age, toAge);
  else if (atoi(age) > atoi(toAge))
    printf("%s is greater than %s\n", age, toAge);
  else
    printf("%s is equal to %s\n", age, toAge);

  return 0;
}

Вывод:

"100" is less than "25"
100 is greater than 25

Как видите, функция atoi может использоваться для получения ожидаемого результата.

0 голосов
/ 02 января 2019

Вы проверяете строки, что означает, что вы проверяете их по алфавиту, и действительно: «2» не идет перед «1» в алфавите: в ASCII значение для «2» равно 50, а для « 1 "- это 49, и действительно: 50 не приходит раньше 49.

Поэтому всегда плохая идея использовать числа и строки, просто относиться к ним как к числам, и все должно быть в порядке:

int FromAge;
int ToAge;
...

Удачи

...