为何打印char数组{{15,23},{35,47}}时输出为#/?
问题原因及解决方法
你定义的是char类型的二维数组,而std::cout输出char时,会把它当作ASCII字符来解析,而非数字本身:
- 15对应ASCII控制字符(Shift Out),终端通常不会显示该字符
- 23对应End of Transmission,同样是不可见的控制字符
- 35对应ASCII字符
# - 47对应ASCII字符
/
所以终端只会显示可识别的#和/,前面的控制字符被忽略,最终输出#/。
方法1:修改数组类型为int
直接将数组类型改为int,让std::cout直接输出数字:
#include <iostream> int main() { int i, j; int arr[2][2] = { {15, 23}, {35, 47}}; for(i=0; i<2; i++){ for (j=0; j<2; j++){ std::cout << arr[i][j] << " "; // 加空格分隔数字,提升可读性 } std::cout << std::endl; // 每行结束换行 } }
方法2:输出时强制类型转换
如果不想修改数组类型,输出时将char强制转为int,让cout输出数字值:
#include <iostream> int main() { int i, j; char arr[2][2] = { {15, 23}, {35, 47}}; for(i=0; i<2; i++){ for (j=0; j<2; j++){ std::cout << static_cast<int>(arr[i][j]) << " "; } std::cout << std::endl; } }
内容的提问来源于stack exchange,提问作者nobody65534
相关产品推荐
相关产品推荐

