有人能解释一下if语句中的感叹号(即!strmcp)是做什么的吗?
string names[] = {"EMMA", "RODRIGO", "BRIAN", "DAVID"};
// Search for EMMA
for (int i = 0; i < 4; i++)
{
if (!strcmp(names[i], "EMMA"))
{
printf("Found\n");
return 0;
}
}
printf("Not found\n");
return 1;发布于 2020-01-16 07:05:22
如果两个字符串相同,则strcmp()返回0,因此如果在if子句中使用它来断言true语句,则需要对其求反。
如果您的子句为if(0),则不会执行条件中的代码。
对于完成,如果找到的第一个不同字符在第一个字符串中较低,则返回负数,例如:
第一个参数字符串:"abca"
第二个参数字符串:abcd"
这将返回负值。如果反之亦然,它将返回正数。
此外,在C中通常不使用string (请参考Jonathan Leffler的评论),您可以使用char*
char *names[] = {"EMMA", "RODRIGO", "BRIAN", "DAVID"};发布于 2020-01-16 07:29:48
对于if语句,如果表达式的计算结果为0,则不执行if语句后面的代码块。任何其他值(正值或负值)将导致执行代码块。函数strcmp使用0来表示字符串相等,因为小于0用于区分大于0。
所以在这段代码中,我们希望在字符串相等时执行printf("Found\n");。因为strcmp的结果是0,所以我们需要取反这个值,这样它就变成了1,这将导致执行该代码块。
发布于 2020-01-16 07:37:39
一元运算符定义称为逻辑非运算符(例如,参见cppreference.com处的this ! )。如果expression的计算结果为0,则! expression返回1;如果expression的计算结果为0以外的任何值,则返回0。
因此,if (!0)中的条件给出了1;这意味着满足条件并输入if块。它与if(0==0)具有相同的含义
因此,
if(!strcmp(names[i], "EMMA"))在您的代码中与
if(0==strcmp(names[i], "EMMA"))而且您已经知道strcmp何时返回0...
https://stackoverflow.com/questions/59760778
复制相似问题