Использование strcmp в операторе if() в пользовательской функции не возвращает ожидаемый результат.

Я работаю над домашним заданием, посвященным строкам для курса «Введение в C». У меня возникли проблемы с использованием функции strcmp() в операторе if внутри пользовательской функции.

Присваивание требует, чтобы мы использовали определяемую пользователем функцию (у меня это Check()), чтобы проверить, являются ли две строки одинаковыми (сравнение введенной пользователем строки со строкой из файла). По какой-то причине мой профессор хочет, чтобы Check() возвращал 1, если строки совпадают, и 2, если строки не совпадают, хотя, насколько мне известно, функция strcmp() уже возвращает 0, если строки совпадают, и какое-то другое значение, если они совпадают. не.

Как только моя функция Check() возвращает значение (x=1 для совпадения, x=2 для отсутствия совпадения), я запускаю это значение x через другой оператор if в моей основной функции, который должен вывести «Вы правы» для x=1, и «Вы не правы» для x=2.

Проблема, с которой я сталкиваюсь, заключается в том, что независимо от того, совпадают ли строки или нет, мое условное выражение в моей основной функции всегда сообщает пользователю, что они верны, то есть строки совпадают. Я предполагаю, что проблема заключается в моей функции Check() и моем использовании strcmp(), так как я не совсем знаком с тем, как работает strcmp().

Я уже пытался изменить свое условное выражение в Check() так, чтобы у меня было if(strcmp(решение, предположение)==0), за которым следует else if(strcmp(решение, предположение)!=0), и это не решило мою проблему. .

Моя пользовательская функция:

int Check(char solution[], char guess[])
{
   if (strcmp(solution, guess) == 0)
   {
      int x = 1;
      return x;
   }
   else
   {
      int x = 2;
      return x;
   }
}

Это передается моей основной функции как:

Check(solution, guess);

if (x == 1)
{
   printf("Congratulations, you guessed correctly");
}
else if (x == 2)
{
   printf("You guessed incorrectly");
}

Когда решение = "ФЛОРИДА" и предположение = "ФОРЛИДА", должно быть напечатано "Вы угадали неправильно", но вместо этого будет "Поздравляем, вы угадали правильно".


person Willow Hearne    schedule 17.10.2019    source источник
comment
Используйте 1_.   -  person Ian Abbott    schedule 17.10.2019
comment
Вы также должны позаботиться о том, чтобы не реализовывать return x несколько раз в одной функции. Одного return x; в конце тела функции достаточно, и это более безопасно.   -  person RobertS supports Monica Cellio    schedule 17.10.2019


Ответы (1)


Вы не присваиваете возвращаемое значение какой-либо переменной.

Написать

x = Check(solution, guess);

перед оператором if.

if (x == 1)
{
   printf("Congratulations, you guessed correctly");
}
else if (x == 2)
{
   printf("You guessed incorrectly");
}

на самом деле вместо else if вы можете написать просто else, потому что есть только две возможности.

Таким образом, без переменной x оператор if может быть переписан как

if ( Check(solution, guess) == 1 )
{
   printf("Congratulations, you guessed correctly");
}
else
{
   printf("You guessed incorrectly");
}

Учтите, что функцию можно определить проще

int Check( const char solution[], const char guess[] )
{
    return strcmp( solution, guess ) == 0 ? 1 : 2;
}
person Vlad from Moscow    schedule 17.10.2019