C++ 10×10二维数组构建问题:首列数字10显示为冒号
解决C++二维数组首列10显示为冒号的问题
问题原因
原代码使用char类型存储首列数字,单个char仅能容纳一个ASCII字符。当循环到i=10时,'0' + 10计算结果为ASCII码58,对应字符':',这就是显示异常的根源。
修复方案
方案1:修改输出逻辑(最小改动)
保持原有char数组结构,仅在输出时单独处理数字10,避免用char存储两位数字:
#include <iostream> using namespace std; int main() { char matrix[11][11]; matrix[0][0] = ' '; // 填充首行A-J for(int i=1; i<=10; i++) { matrix[0][i] = 'A' + i - 1; } // 填充首列1-9(10在输出时单独处理) for(int i=1; i<=9; i++) { matrix[i][0] = '0' + i; } // 填充其余区域为'.' for(int i=1; i<=10; i++) { for(int j=1; j<=10; j++) { matrix[i][j] = '.'; } } // 输出矩阵,单独处理第10行第0列的10 for(int i=0; i<=10; i++) { for(int j=0; j<=10; j++) { if(i == 10 && j == 0) { cout << "10"; } else { cout << matrix[i][j]; } cout << " "; } cout << endl; } return 0; }
方案2:改用字符串二维数组(更直观)
将数组类型改为string,直接存储两位数字10,无需特殊处理输出逻辑:
#include <iostream> #include <string> using namespace std; int main() { string matrix[11][11]; matrix[0][0] = " "; // 填充首行A-J for(int i=1; i<=10; i++) { matrix[0][i] = string(1, 'A' + i - 1); } // 填充首列1-10,直接转为字符串存储 for(int i=1; i<=10; i++) { matrix[i][0] = to_string(i); } // 填充其余区域为'.' for(int i=1; i<=10; i++) { for(int j=1; j<=10; j++) { matrix[i][j] = "."; } } // 直接输出矩阵 for(int i=0; i<=10; i++) { for(int j=0; j<=10; j++) { cout << matrix[i][j] << " "; } cout << endl; } return 0; }
方案对比
- 方案1:改动量极小,适合需要保留原有char数组结构的场景,仅通过输出逻辑规避char的存储限制。
- 方案2:代码逻辑更清晰,扩展性更强,后续如果需要存储更长的文本也无需修改核心逻辑。
内容的提问来源于stack exchange,提问作者zenzty
相关产品推荐
相关产品推荐

