C语言中对比"++X"等字符串时逻辑异常如何解决
错误原因
- 核心问题是对
strcmp函数的返回值规则理解错误:C语言标准库中,strcmp仅在两个输入字符串完全相等时返回0,若第一个字符串字典序大于第二个返回正整数,小于则返回负整数,你写的==1的判断条件完全不符合字符串相等的判定逻辑。 - 之前你观察到代码能识别
X++属于偶发的测试巧合,该逻辑在不同编译器、不同输入场景下随时会失效。
修正方法
将if判断语句中两个strcmp的判断条件从==1改为==0即可,修正后完整代码如下:
#include<stdio.h> #include<string.h> int main() { int n,count=0; char c[5]; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%s",c); if(strcmp(c,"X++")==0 || strcmp(c,"++X")==0) count++; else count--; } printf("%d",count); return 0; }
内容的提问来源于stack exchange,提问作者Md Nasir Ahmed
相关产品推荐
相关产品推荐

