C++正负整数求和输出异常 二维数组列和是否为0校验问题
问题原因分析
你当前输出不符合预期的核心原因是求和逻辑计算的是每一行的和,而非你需要的每一列的和,具体说明如下:
- 你定义的二维数组
int numbers[3][lines]中,第一个下标对应行号(取值02,共3行),第二个下标对应列号(取值0lines-1,共lines列)。 - 你现有求和循环的外层遍历的是行号,内层遍历同一行的所有列,本质是逐行求和,得到的结果是3个行和:对应你的示例输入,第一行元素为
1、1和为2,第二行元素为1、-1和为0,第三行元素为-1、-1和为-2,和你给出的示例输出完全吻合。
修复方案
如果要实现列和计算,只需调换两层循环的遍历顺序,外层遍历列号,内层累加同一列的所有行元素即可,参考代码如下:
for(int j = 0; j < lines; j++){ // 外层遍历每一列 temp = 0; for(int i = 0; i < 3; i++){ // 内层累加当前列的3个行元素 temp += numbers[i][j]; } // 此处可增加temp是否为0的判断,满足你的业务需求 cout << temp << endl; }
额外注意事项
你代码中使用的int numbers[3][lines]属于变长数组(VLA),并不是C标准支持的语法,仅为部分编译器的扩展实现,兼容性较差。建议替换为标准C支持的vector容器实现,写法如下:
vector<vector<int>> numbers(3, vector<int>(lines));
内容的提问来源于stack exchange,提问作者Hichkas
相关产品推荐
相关产品推荐

