我希望它生成一个if
语句来检查name
和familyname
变量。
我希望我的陈述是这样的:
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);
}
}
答案 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);
}