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
相关产品推荐
相关产品推荐

