C++数组目标和匹配程序无匹配结果输出混乱问题求助
C++数组元素和匹配程序修复方案
核心问题梳理
你遇到的输出混乱问题本质是代码存在3处关键错误:
- 数组下标越界:
intArray长度为15,合法下标范围是0~14,原代码两层循环写了i <= SIZE、j <= SIZE,会访问到不存在的intArray[15],属于未定义行为,会引发乱码输出、异常触发匹配、甚至程序崩溃,也是提示重复打印的核心诱因。 - 配对逻辑冗余:当前j从1开始全量遍历,会出现「i=0,j=1」和「i=1,j=0」这种同一组合重复输出的情况,也会出现i=j、同一个元素相加两次的不合理逻辑。
- 缺少文件合法性校验:未判断输入文件是否打开成功,文件不存在时读取的数组全是垃圾值,也会导致输出异常。
修复后完整代码
#include <iostream> #include <fstream> #include <string> using namespace std; const int SIZE = 15; int intArray[SIZE]; void readData(istream& inFile) { for (int i = 0; i < SIZE; i++){ inFile >> intArray[i]; cout << intArray[i] << " "; } cout << endl; } int main() { int sum; ifstream inFile; string inFileName = "inFile.txt"; inFile.open(inFileName.c_str()); // 新增文件打开失败判断 if (!inFile.is_open()) { cout << "输入文件打开失败,请检查文件是否存在" << endl; return 1; } readData(inFile); cout << "请输入需要匹配的目标和: "; cin >> sum; bool hasMatch = false; // 修正循环边界,j从i+1开始避免重复配对 for(int i = 0; i < SIZE; i++){ for(int j = i + 1; j < SIZE; j++){ if((intArray[i] + intArray[j]) == sum){ cout << "元素" << i << "(值为" << intArray[i] << ")和元素" << j << "(值为" << intArray[j] << ")相加等于目标和" << sum << endl; hasMatch = true; } } } if(!hasMatch){ cout << "未找到匹配的和" << endl; } inFile.close(); return 0; }
关键修复说明
- 把循环边界从
<= SIZE改为< SIZE,彻底解决数组越界问题 - 内层循环j从
i+1开始遍历,每个组合只会输出一次,也避免了同一个元素重复相加的情况 - 新增文件打开成功校验,提前拦截文件不存在的异常场景
- 输出提示改为符合需求的中文内容,变量名
error改为语义更清晰的hasMatch
内容的提问来源于stack exchange,提问作者TimJones
相关产品推荐
相关产品推荐

