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

如何实现检测用户输入6个数组元素是否存在重复值的C++函数?

解决数组初始化限制下的重复值判断问题

问题分析

你遇到的核心问题是数组被强制初始化为int tbl[6] = {0}(C++中这种部分初始化会让所有未指定的元素默认值为0,即整个数组初始全为0)。如果最初的重复判断函数存在元素与自身对比的逻辑(比如内层循环从j=0开始且未排除i==j的情况),就会直接误判为存在重复。你现在给出的contientDoublons函数对比逻辑是正确的,但原代码存在语法结构问题,需要调整以保证正常运行。

修正后的完整代码

#include <iostream>

// 先声明函数
bool contientDoublons(int tbl[]);

int main() {
    int tbl[6] = { 0 }; // 考试中无法修改此初始化方式

    // 完整输入6个数字,覆盖所有数组元素
    for (int i = 0; i < 6; i++)
    {
        std::cout << "请输入第" << i + 1 << "个数字? ";
        std::cin >> tbl[i];
        // 可选:添加输入验证,防止非整数输入导致元素未被覆盖
        while (!std::cin) {
            std::cin.clear();
            std::cin.ignore(1000, '\n');
            std::cout << "输入无效,请输入整数:";
            std::cin >> tbl[i];
        }
    }

    // 调用函数并输出结果
    if (contientDoublons(tbl)) {
        std::cout << "数组中存在重复值" << std::endl;
    } else {
        std::cout << "数组中无重复值" << std::endl;
    }

    return 0;
}

bool contientDoublons(int tbl[])
{
    // 外层循环遍历所有元素
    for (int i = 0; i < 6; i++)
    {
        // 内层循环从当前元素的下一个开始,避免自身对比和重复对比
        for (int j = i + 1; j < 6; j++)
        {
            if (tbl[i] == tbl[j])
            {
                return true; // 找到重复值立即返回
            }
        }
    }
    return false; // 遍历完无重复则返回false
}

关键说明

  • 输入循环的完整性:必须确保6次输入全部执行,完全覆盖数组的初始0值,避免残留的0导致误判。如果用户输入非整数,cin会进入失败状态,此时需要通过clear()和ignore()恢复输入状态,确保元素被正确覆盖。
  • 对比逻辑的正确性:内层循环从j = i + 1开始,保证每个元素只和它之后的元素对比一次,既不会出现自身对比,也不会重复检查(比如不会同时检查tbl[0]和tbl[1]、tbl[1]和tbl[0])。
  • 代码结构修复:原代码的输入循环和数组定义没有放在函数作用域内(比如main函数),这是语法错误,必须调整到函数内部才能正常编译运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:41:03