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

如何以优雅方式检查数组元素是否已存在?C语言代码优化需求

优化重复元素检查的C语言数组输入程序

任务要求

  • 创建一个包含20个元素的数组
  • 手动向数组插入20个范围在10到100(包含边界值)的整数
  • 若输入数字不满足10 ≤ x ≤ 100,提示输入无效并要求重新输入
  • 若输入的有效数字是首次插入(数组中不存在该元素),则打印该数字;重复数字不计入需插入的20个数字中

原代码存在的问题

原代码通过大量嵌套if语句检查元素是否重复,不仅效率低下、逻辑冗余,还存在数组越界风险(比如当i=0时访问a[i-1]);同时使用goto语句导致程序流程混乱,输入错误时会从头开始循环,用户体验差。

优化后的代码

#include <stdio.h>
#define SIZE 20

// 检查数字是否已存在于数组的前count个元素中
int isDuplicate(int num, int arr[], int count) {
    for (int i = 0; i < count; i++) {
        if (arr[i] == num) {
            return 1; // 存在重复
        }
    }
    return 0; // 不存在重复
}

int main() {
    int a[SIZE];
    int insertedCount = 0; // 已插入的有效不重复数字数量

    while (insertedCount < SIZE) {
        int input;
        printf("请输入第%d个数字(共需输入20个,范围10-100):\n", insertedCount + 1);
        
        // 处理输入格式错误(比如输入非整数)
        if (scanf("%d", &input) != 1) {
            printf("输入无效,请输入整数!\n");
            // 清空输入缓冲区
            while (getchar() != '\n');
            continue;
        }

        // 检查输入范围
        if (input < 10 || input > 100) {
            printf("输入无效,请输入10到100之间的整数!\n");
            continue;
        }

        // 检查是否重复
        if (isDuplicate(input, a, insertedCount)) {
            printf("该数字已存在,请重新输入!\n");
            continue;
        }

        // 插入并打印
        a[insertedCount] = input;
        printf("已插入有效数字:%d\n", input);
        insertedCount++;
    }

    printf("20个不重复的有效数字已全部插入完成!\n");
    return 0;
}

优化说明

  1. 重复检查优化:用独立函数isDuplicate配合循环遍历已插入元素,替代嵌套if,逻辑清晰且避免数组越界,时间复杂度更可控
  2. 流程控制优化:去掉goto,改用while循环跟踪已插入数量,输入错误时仅重新输入当前值,提升用户体验
  3. 输入健壮性提升:增加了非整数输入的处理,清空输入缓冲区避免死循环
  4. 逻辑清晰度提升:用insertedCount明确跟踪有效元素数量,避免原代码中i--的混乱逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:50:14