You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中三个字符数组比较逻辑错误排查

问题排查与解决:三个字符数组比较的逻辑漏洞

我帮你梳理了代码里的问题,核心是逻辑分支的顺序和覆盖范围出错了。

当c2和c3相等但c1和它们不同时,程序会走到第一个else,然后触发第二个判断:

if (strcmp(c1, c2) != 0 && strcmp(c1, c3) != 0) {
    cout << "The three arrays are different" << endl;
}

这个条件此时是成立的(毕竟c1和c2、c1和c3确实都不等),所以程序直接输出“三个数组都不同”,完全没机会走到后面判断c2和c3相等的分支——前面的分支错误地把这个特殊情况归类到了“全不同”里。

解决思路:调整判断顺序,优先检查两两相等的情况

我们可以把逻辑顺序反过来:先检查每一对是否相等,最后再判断是否三个都不同。这样既不会出现分支被提前覆盖的问题,代码结构也会更清晰。

修改后的代码

#include <iostream>
#include <string.h>
using namespace std;
#define MAX 20

int main() {
    char c1[MAX], c2[MAX], c3[MAX];
    cout << "Introduce array 1: ";
    cin >> c1;
    cout << "Introduce array 2: ";
    cin >> c2;
    cout << "Introduce array 3: ";
    cin >> c3;

    // 先把判断条件抽成布尔变量,让逻辑更直观
    bool allEqual = (strcmp(c1, c2) == 0) && (strcmp(c1, c3) == 0);
    bool pair12Equal = (strcmp(c1, c2) == 0) && !allEqual;
    bool pair13Equal = (strcmp(c1, c3) == 0) && !allEqual;
    bool pair23Equal = (strcmp(c2, c3) == 0) && !allEqual;

    if (allEqual) {
        cout << "The three arrays are equal" << endl;
    } else if (pair12Equal) {
        cout << "1 and 2 are equal" << endl;
    } else if (pair13Equal) {
        cout << "1 and 3 are equal" << endl;
    } else if (pair23Equal) {
        cout << "2 and 3 are equal" << endl;
    } else {
        cout << "The three arrays are different" << endl;
    }

    return 0;
}

代码说明

  1. 用布尔变量把判断逻辑抽离出来,避免多层嵌套导致的逻辑混乱
  2. 先判断三个数组全相等的情况
  3. 再依次判断每一对相等的情况(用!allEqual排除“全相等”的重复判断)
  4. 最后如果以上情况都不满足,才判定三个数组完全不同

这样修改后,所有场景都能正确输出——包括你之前出错的c2和c3相等但c1不同的情况。

内容的提问来源于stack exchange,提问作者AnonymousDeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 10:12:35