C语言布尔逻辑疑问:为何判断BEL国籍时用strcmp==0?
C语言中strcmp返回值与布尔判断的疑问解答
嘿,这个问题刚接触C语言字符串操作时真的很容易绕进去,我来给你掰扯清楚~
首先得明确C语言里的布尔判断逻辑:你说的「0代表false、1代表true」没错,但更准确的规则是任何非0的数值都会被判定为“真”,只有0才是“假”——1只是“真”的其中一个典型值,不是唯一的哦。
接下来重点说strcmp这个函数,它的设计逻辑和你直觉里的“相等为真”有点不一样:
- 当两个字符串完全匹配时,它返回0
- 当第一个字符串比第二个字典序小,返回负数
- 当第一个字符串比第二个字典序大,返回正数
所以回到你的代码:你要筛选国籍为"BEL"的用户,本质是判断目标字符串和"BEL"是否相等。这时候只有strcmp(...) == 0这个条件的结果是「真」(也就是1),才会触发if语句里的打印逻辑。如果直接写strcmp(...)的话,当字符串相等时返回0,会被判定为“假”,反而不会执行代码块,完全和你的需求相反。
给你举个极简的例子辅助理解:
char a[] = "BEL"; char b[] = "BEL"; char c[] = "GER"; // 字符串相等,strcmp返回0,条件为真,执行打印 if (strcmp(a, b) == 0) { printf("a和b相等\n"); } // 字符串不相等,strcmp返回非0,条件为真,执行打印 if (strcmp(a, c)) { printf("a和c不相等\n"); }
内容的提问来源于stack exchange,提问作者Vanessa Moe
相关产品推荐
相关产品推荐

