C 编程中的感叹号和 `strcmp` 函数

Ric*_*y.L 3 c boolean-expression strcmp cs50

在学习哈佛大学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;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,它用于if (strcmp(names[i], "EMMA") == 0)检查名称“EMMA”。

然而,它也想如果我像如果我更换另一种方式写代码的运行if (strcmp(names[i], "EMMA") == 0)if (!strcmp(names[i], "EMMA")),和原来相同的答案“找到”。

如果我没记错的话!,C中的感叹号的意思是“NOT”。在第一种方法中,它使用两个等号来表示与 0 相同的值。但在第二种方法中,它在函数 前面使用感叹号strcmp。我不熟悉为什么它在第二种方法中也给出相同的输出的含义,即使我已经查找了 function 的定义strcmp

此外,如果有人能告诉我该strcmp函数将赋予什么价值以及用简单的词语正确表达什么,那就太好了?

Ard*_*der 5

!运算符用于布尔否定。

!01(true)相同

!10(false)相同

事实上,每个非零整数都true在 C 中,只有 0 是false

所以,如果strcmp(names[i], "EMMA") == 0是真的

然后!strcmp(names[i], "EMMA")也是真的,因为!0true

此外,如果有人能告诉我 strcmp 函数会给出什么值以及用简单的话正确表达什么,那就太好了?

检查此链接

简而言之,

strcmp 可以返回三个可能的值:

0,如果两个字符串相等

一个正整数,如果第一个字符串大于第二个字符串

一个负整数,如果第一个字符串小于第二个字符串