Использование strcmp в операторе if () в определенной пользователем функции не возвращает ожидаемый результат - PullRequest
1 голос
/ 17 октября 2019

Я работаю над домашним заданием, концентрируясь на строках для вступления в класс 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");
}

Когда solution = "FLORIDA" и предположить = "FORLIDA", "Вы ошиблись" должны быть напечатаны, но«Поздравляю, вы правильно догадались» - вместо этого.

1 Ответ

1 голос
/ 17 октября 2019

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

Запись

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...