如何在while循环中以矩阵格式打印二维数组
解决二维数组矩阵格式打印时出现随机值的问题
首先咱们来拆解下你遇到的问题根源:当读取过程中遇到-1时,bad会被设为true,内层嵌套循环会立即终止——这时候二维数组ArrB里还有部分元素没被文件中的值赋值,这些未被赋值的元素在内存里是随机的垃圾值,你直接用完整的矩阵打印循环输出整个数组,自然会出现一堆乱码一样的随机数。
另外你原来的代码是边读取边打印单个元素,现在要改成矩阵格式,得调整读取和打印的时机,确保只打印那些已经被成功读取的有效数据,或者在数组完全填满(没有提前遇到-1)的情况下再打印完整矩阵。
下面是修改后的完整代码,我标注了关键修改点:
#include <iostream> #include <fstream> #include <string> #define MAX_ROWS 3 #define MAX_COLUMNS 2 using namespace std; int main() { string fileName = "inFilePgm2A.txt"; ifstream inFile; inFile.open(fileName); int checkNbr; int ArrB[MAX_ROWS][MAX_COLUMNS]; bool bad = false; bool invalidnum = false; while (!inFile.eof()) { bad = false; invalidnum = false; // 每次循环重置无效数字标记 // 先尝试完整填充二维数组 for (int i = 0; (i < MAX_ROWS) && !bad; i++) { for (int j = 0; (j < MAX_COLUMNS) && !bad; j++) { // 先读取到临时变量,避免把-1存入数组或留下未赋值空位 int temp; inFile >> temp; if (temp == -1) { bad = true; cout << "\nThe array does not have enough integers\n"; } else { ArrB[i][j] = temp; if (ArrB[i][j] < 1) { invalidnum = true; } } } } // 仅当数组被完全填满(未提前遇到-1)时,打印矩阵格式 if (!bad) { cout << "\n完整矩阵输出:\n"; for(int i = 0; i < MAX_ROWS; i++) { for(int j = 0; j < MAX_COLUMNS; j++) { cout << ArrB[i][j] << "\t"; } cout << endl; } // 检查后续数字是否合规 inFile >> checkNbr; if (checkNbr == -1) { cout << "The size of the array is correct." << endl; } else { cout << "\n多余的数字:"; while (checkNbr != -1) { cout << checkNbr << " "; inFile >> checkNbr; } cout << "\nYou have too many numbers in this array\n"; } } // 输出无效数字提示 if (invalidnum) { cout << "\nThere is/are negative number(s) or zero(s) in the array imported from your text file.\n"; } } inFile.close(); // 记得关闭文件流 return 0; }
关键修改说明:
- 临时变量读取:先把文件内容读到临时变量
temp,确认不是-1后再赋值给数组,避免把终止符存入数组,也防止提前终止时留下未赋值的空位。 - 打印时机控制:只有当
bad为false(数组被完全填满)时,才执行矩阵打印循环,彻底避免输出未赋值的随机值。 - 标记位重置:每次进入外层循环时重置
invalidnum,避免上一轮的标记影响当前组的判断。 - 细节优化:给多余数字的输出加上前缀增强可读性,补充了文件关闭操作(原代码遗漏了这一步)。
当你的输入文件内容是1 2 3 4 5 6 -1 1 2 3 7 5 8 -1 -5 9 4 -1时,程序会先打印第一个完整的3行2列矩阵并提示大小正确;接着处理第二组有效数字,打印矩阵后发现后续还有多余数字并给出提示;最后一组因为未填满数组就遇到-1,只会提示元素不足,不会打印矩阵(避免随机值输出)。
内容的提问来源于stack exchange,提问作者Beans
相关产品推荐
相关产品推荐

