C++中如何将int变量赋值给int数组?及数组下标错误排查
问题分析与解决
1. 报错原因:invalid types ‘int[int]’ for array subscript
你定义的prices是一维int数组:
int prices[7];
但代码里却把它当成二维数组使用(prices[i][0]、prices[i][1])——一维数组的元素是int类型,无法再通过第二个下标访问,这直接导致了类型错误。
如果你的需求是存储「客户编号+对应总价」这类二维数据,建议改用你已经定义好的resumen[5][2](5行2列的int二维数组,刚好匹配你要存储的两个值)。修正后的代码示例:
// 替换原来的prices错误行 resumen[i][0] = i + 1; // 存储客户编号 resumen[i][1] = prices[opc - 1] * cantidad; // 注意:prices应该是对应商品的单价数组,用opc-1做下标,匹配products的0-6索引
另外,你原来的字符串拼接代码存在逻辑错误:""+cantidad+products[0]不会把int转成字符串,而是会执行指针偏移运算,得到错误的字符串结果。正确的写法是用std::to_string()转换int为字符串,还能简化冗余的if-else链:
// 替代7个if-else分支 clients[i][1] = std::to_string(cantidad) + products[opc - 1];
2. C++中int变量赋值给int数组的方法
(1)单元素直接赋值
通过数组下标直接给对应位置赋值:
- 一维数组:
int arr[5]; int num = 10; arr[0] = num; // 把num的值赋给数组第0个元素 arr[2] = 20; // 直接给元素赋字面量int
- 二维数组:
int arr[3][2]; int val = 5; arr[1][0] = val; // 赋值给第1行第0列的元素 arr[0][1] = 15; // 直接赋字面量
(2)初始化阶段批量赋值
数组声明时用列表初始化:
int arr[5] = {1, 2, 3, 4, 5}; // 逐个给元素赋值 int arr2[3][2] = {{10,20}, {30,40}, {50,60}}; // 二维数组的列表初始化
如果初始化列表元素数量少于数组大小,剩余元素会被默认初始化为0。
(3)循环批量赋值
通过循环给数组元素批量赋值(适合重复逻辑或全量赋值):
int arr[10]; int baseVal = 7; for(int j = 0; j < 10; j++){ arr[j] = baseVal + j; // 每个元素赋值为baseVal加下标值 }
内容的提问来源于stack exchange,提问作者Witsamalababusa
相关产品推荐
相关产品推荐

