如何实现检测用户输入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.
相关产品推荐
相关产品推荐

