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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:06:07