如何找出两个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; }
关键修正说明:
- 修复输入循环:改用标准
do { ... } while(...)结构,确保输入非正整数时强制用户重新输入。 - 正确的交集查找:通过双层嵌套循环遍历两个数组的所有元素,逐一比对找到共同值。
- 优化输出逻辑:添加
encontrou标记,无共同元素时给出明确提示;找到匹配项后跳出内层循环,避免重复输出同一元素(若不需要去重可删除break)。 - 规避数组越界:所有数组访问严格控制在0-9的合法下标范围内,避免非法内存访问。
内容的提问来源于stack exchange,提问作者luuz
相关产品推荐
相关产品推荐

