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

C++实现用户输入数组时遍历检测重复值并拒绝录入的方法

原代码问题说明

原实现无法达到预期的核心问题如下:

  • 重复检测遍历范围错误:内层循环从j=i+1开始遍历,但i之后的数组元素还未赋值,存储的是内存随机垃圾值,根本无法做有效比对。正确的检测范围应该是已经完成赋值的0到i-1索引位。
  • 缺少重复输入的循环校验:原逻辑仅做一次重复判断,如果用户重新输入的值仍然和已有元素重复,程序不会再次检测,直接进入下一个索引的输入流程。
  • 提示文本不符合要求:原代码输出的重复提示携带了索引信息,和示例要求的Invalid. Enter a new number: 不一致。
  • 语法兼容性问题:原代码使用的变长数组(int array1[size],size为运行时输入的变量)不属于标准C++语法,仅部分编译器做了扩展支持,兼容性差。
修正后可运行代码
#include <iostream>
using namespace std;

int main() {
    int size;
    cout << "Enter list size: ";
    cin >> size;
    int* array1 = new int[size];

    for (int i = 0; i < size; i++) {
        cout << "Enter value for index " << i << ": ";
        cin >> array1[i];
        
        bool needReinput = true;
        while (needReinput) {
            needReinput = false;
            // 遍历所有已输入的元素做重复校验,符合题目要求的遍历搜索规则
            for (int j = 0; j < i; j++) {
                if (array1[i] == array1[j]) {
                    cout << "Invalid. Enter a new number: ";
                    cin >> array1[i];
                    needReinput = true;
                    break;
                }
            }
        }
    }

    delete[] array1;
    return 0;
}
实现逻辑说明
  • 每次输入当前索引位的数值后,仅遍历之前已经完成赋值的元素做比对,不会访问未初始化的内存位置,避免误判。
  • 用while循环包裹校验逻辑,只要检测到重复就提示重输,且每次输入新值后都会重新遍历所有已有元素做检测,确保重输的值也不会重复。
  • 所有输入输出提示完全匹配给出的运行示例。
  • 采用动态内存申请的方式创建数组,符合标准C++语法,跨编译器兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.10 16:15:45