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

C++多维数组setter方法实现报错,求问题排查与修正方案

问题分析与修正方案

你的当前做法不正确,存在多处语法和逻辑错误,以下是具体问题和修正方法:

错误点说明

  • 未声明变量:函数内使用的columns、name、medals都没有提前声明,编译器无法识别这些标识符,这是触发报错的直接原因之一。
  • 循环与数组下标逻辑混乱:
    • 你声明的数组是competitors_list[2][1000],第一维对应固定的2组(你说的“列数为2”),第二维对应每组的选手数量(用户输入的行数),但你的循环把下标顺序写反了,应该用第一维遍历2组,第二维遍历用户输入的行数。
    • 内层循环用未定义的columns作为终止条件,实际应该用函数参数rows。
  • 结构体赋值方式错误:不能用= medals, name这种逗号表达式直接给结构体赋值,必须逐个给结构体的成员赋值,或者创建临时结构体对象后再赋值。

修正后的代码

void set_competitors_list(int rows) {          
    // 先判断输入的行数是否超出数组上限,避免越界
    if (rows > 1000) {
        cout << "输入的行数不能超过1000!" << endl;
        return;
    }

    int groupCounter, competitorCounter;
    string name;
    int medals;

    // 遍历2组(数组第一维)
    for (groupCounter = 0; groupCounter < 2; groupCounter++) { 
        // 遍历每组的选手,次数为用户输入的rows
        for (competitorCounter = 0; competitorCounter < rows; competitorCounter++) {                
             cout << "请输入第" << groupCounter + 1 << "组第" << competitorCounter + 1 << "位选手的姓名和奖牌数:";
             cin >> name >> medals;
             // 逐个赋值结构体成员
             competitors_list[groupCounter][competitorCounter].competitor_name = name;
             competitors_list[groupCounter][competitorCounter].competitor_medals = medals;
             // 也可以用临时结构体对象赋值(C++11及以上支持)
             // competitors_list[groupCounter][competitorCounter] = {name, medals};
       }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:20:55