C++二维数组输出列数异常求助:无法实现8x8数组相加
8x8二维数组相加功能的问题排查与修复
问题分析
你的代码有三个关键问题,直接导致无法实现预期的8x8数组相加功能:
1. 循环边界没写对
你定义的是8x8的数组,但循环条件用了i < 7和j < 7——这只能遍历前7行、7列的元素,数组最后一行(索引7)和最后一列(索引7)的元素根本没被初始化,内存里都是随机垃圾值。要覆盖整个8x8数组,循环条件得改成i < 8和j < 8。
2. 循环嵌套逻辑乱,还提前退出了
你在计算完addition数组的第一行(i=0)之后,直接套了输出的双重循环,而且输出完第一行就执行了return 0——程序直接退出,后面的7行数据根本没机会处理,自然看不到完整的8组结果。
3. 输出格式太散,导致视觉误解
现在的输出是每个元素单独占一行,看起来像是“列数不够”,实际上是你没按行的逻辑来组织输出,导致结构混乱。
修复后的代码
#include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> // 补充time函数所需的头文件 using namespace std; int main() { srand(time(0)); int array1[8][8]; int array2[8][8]; int addition[8][8]; // 填充array1的全部8x8元素 for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { array1[i][j] = rand() % 6; } } // 填充array2的全部8x8元素 for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { array2[i][j] = rand() % 8; } } // 计算两个数组的和 for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { addition[i][j] = array1[i][j] + array2[i][j]; } } // 按行输出结果,每行展示8组对应元素与和 for (int i = 0; i < 8; i++) { cout << "第" << i+1 << "行:" << endl; for (int j = 0; j < 8; j++) { cout << "array1[" << i << "][" << j << "] = " << setw(2) << array1[i][j] << " | array2[" << i << "][" << j << "] = " << setw(2) << array2[i][j] << " | 和 = " << setw(2) << addition[i][j] << endl; } cout << "-------------------------" << endl; } return 0; }
修复说明
- 修正循环边界,确保所有8x8数组元素都被正确初始化和计算。
- 重构代码结构:将数组填充、求和、输出三个步骤拆分,移除提前退出的
return 0,保证所有数据都能被处理。 - 优化输出格式,按行分组展示每个位置的元素与和,用
setw让输出对齐,结构更清晰。 - 补充了缺失的
<ctime>头文件,保证time()函数能正常编译运行。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

