如何将多个if语句合并为一个

时间:2016-12-20 13:16:00

标签: c

我希望它生成一个if语句来检查namefamilyname变量。

我希望我的陈述是这样的:

if(strcmp(name && family name , "first" /* how can i do here??? */ ) == 0){}

我目前的代码如下:

if (strcmp(name , "MyName" ) == 0 ){
    if (strcmp(familyname,"Myfamilyname") == 0){
        printf("Name:%s %s is Verified!\n", name , familyname);
    }
}

3 个答案:

答案 0 :(得分:3)

您可以使用&&运算符:

if(!strcmp(name, "MyName") && !strcmp(family_name, "MyFamilyName")) {
    // do your stuff
}

C的逻辑运算符(&&||)支持短路。这意味着一旦表达式的值已知,就不会计算其余部分。例如,如果第一个strcmp求值为非零(第一个名称不匹配),则根本不会进行第二个比较,因为此时表达式无法为真。这可用于检查NULL内容,例如:if(name != NULL && !strcmp(name, "blah")) ...

!运算符是逻辑not,它将任何非零值转换为零,将任何零转换为1。 (这与二进制而不是~不同,后者会单独翻转所有位:!5 == 0,但~5 == -6)。因此,!strcmp(...)strcmp(...) == 0的缩写。

!A && !B形式的任何逻辑表达式都可以重新标记为!(A || B)。这是De Morgan's Laws的一个具体示例,它通常使您的代码阅读更容易。鉴于此,您的if语句可以重写为

if(!(strcmp(name, "MyName") || strcmp(family_name, "MyFamilyName"))) {
    // do your stuff
}

这是@Boiethios写的方式。

答案 1 :(得分:2)

像你一样做strcmp

if ((strcmp(name, "MyName") || strcmp(family_name, "MyFamilyName")) == 0) {
    // do your stuff
}

使用二进制或运算符||,这样如果其中一个返回值不为零,则整个结果也不同于零。

答案 2 :(得分:1)

以下是组合条件

if ((strcmp(name , "MyName" ) == 0 ) && (strcmp(familyname,"Myfamilyname") == 0)){
    printf("Name:%s %s is Verified!\n", name , familyname);
}