Есть вопрос, который меня смущает во время обучения на курсе Гарвардского университета CS50. Следующий вопрос беспокоит меня долгое время.
Для следующего кода он хочет сравнить строку с именем "EMMA" с массивом с именем "names", который содержит 4 имени внутри.
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
// An array of names
string names[] = {"EMMA", "RODRIGO", "BRIAN", "DAVID"};
// Search for EMMA
for (int i = 0; i < 4; i++)
{
if (strcmp(names[i], "EMMA") == 0)
{
printf("Found\n");
return 0;
}
}
printf("Not found\n");
return 1;
}
В приведенных выше кодах он использует if (strcmp(names[i], "EMMA") == 0)
для проверки имени "EMMA".
Однако он также будет работать, если я напишу код другим способом, как если бы я заменил if (strcmp(names[i], "EMMA") == 0)
с if (!strcmp(names[i], "EMMA"))
, и получается тот же ответ «Найдено».
Если мне не изменяет память, то восклицание !
в C означает «НЕ». В первом методе используются два знака равенства, равные express, значение получается одинаковым с 0. Но во втором методе используются восклицательные знаки перед функцией strcmp
. Я не знаком со смыслом того, почему он также дает тот же результат во втором методе, хотя я посмотрел определение функции strcmp
.
Более того, было бы здорово, если бы кто-то мог сказать мне какое значение даст функция strcmp
и каково правильное выражение в простых словах?