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

如何找出两个C语言数组中的匹配值并输出?

问题分析与修正方案

先明确你两段代码的核心问题:

  • 输入校验语法错误:你写的{ ... }while(...)不是标准的do-while循环结构,导致输入非正整数时无法触发重新输入的逻辑,校验完全失效。
  • 交集查找逻辑错误:你在数组遍历结束后(此时i=10,已超出数组下标范围)仅做一次元素比对,既存在数组越界风险,也没有遍历两个数组的所有元素完成完整匹配。
  • 变量与输出逻辑混乱:部分变量未初始化就使用,输出语句位置错误,导致程序行为异常。

以下是修正后的完整代码,完全符合你的需求(无模块化代码,正确找出两个数组的交集):

#include <stdio.h>
#include <locale.h>

int main() {    
    setlocale(LC_ALL, "Portuguese");
    int vetor[10], vetor2[10];
    int i, j;
    int encontrou; // 标记是否找到共同元素

    // 输入第一个数组,确保每个数大于0
    printf("Digite 10 números inteiros e maiores que zero:\n");
    for (i = 0; i < 10; i++) {
        do {       
            printf("Número %d: ", i + 1);
            scanf("%d", &vetor[i]);
        } while (vetor[i] <= 0); // 标准do-while循环,输入不符合则重新输入
    }   

    // 输入第二个数组,同样校验正整数
    printf("\nDigite mais 10 números inteiros e maiores que zero:\n");
    for (i = 0; i < 10; i++) {
        do {       
            printf("Número %d: ", i + 1);
            scanf("%d", &vetor2[i]);
        } while (vetor2[i] <= 0);
    }   
    
    // 输出第一个数组内容
    printf("\nValores digitados no vetor 1:\n");
    for (i = 0; i < 10; i++) {
        printf("%d ", vetor[i]);
    }

    // 输出第二个数组内容
    printf("\n\nValores digitados no vetor 2:\n");
    for (i = 0; i < 10; i++) {
        printf("%d ", vetor2[i]);
    }
    
    // 查找并输出两个数组的共同元素
    printf("\n\nValores que fazem parte nos dois vetores:\n");
    encontrou = 0; // 初始化为未找到状态
    for (i = 0; i < 10; i++) {
        // 遍历第一个数组的每个元素,与第二个数组所有元素比对
        for (j = 0; j < 10; j++) {
            if (vetor[i] == vetor2[j]) {
                printf("%d ", vetor[i]);
                encontrou = 1;
                break; // 找到匹配项后跳出内层循环,避免重复输出同一元素
            }
        }
    }

    // 无共同元素时给出提示
    if (!encontrou) {
        printf("Nenhum valor comum encontrado.");
    }

    return 0;
}

关键修正说明:

  1. 修复输入循环:改用标准do { ... } while(...)结构,确保输入非正整数时强制用户重新输入。
  2. 正确的交集查找:通过双层嵌套循环遍历两个数组的所有元素,逐一比对找到共同值。
  3. 优化输出逻辑:添加encontrou标记,无共同元素时给出明确提示;找到匹配项后跳出内层循环,避免重复输出同一元素(若不需要去重可删除break)。
  4. 规避数组越界:所有数组访问严格控制在0-9的合法下标范围内,避免非法内存访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:07:24