C语言1D数组转2D坐标系时for循环内if语句无效X轴不显示问题
问题分析与解决方案
根本原因
你没有正确计算1维数组模拟二维数组的偏移索引,1维数组存储二维矩阵的通用索引公式为:一维索引 = 行号 * 每行宽度 + 列号,你现有的两个函数都只使用列号作为索引,所有行的操作都覆盖到了第一行的内存空间,导致X轴数据被后续循环覆盖,且打印时所有行都输出第一行内容。
错误细节
- 初始化函数问题:当循环到
i == height/2(X轴所在行)时,你把第一行的所有位置赋值为x,但循环会继续执行后续的行,后续行的else分支会再次修改第一行的内容,将其覆盖为y和填充字符ic,最终第一行也不会保留X轴的x字符。 - 打印函数问题:打印时始终取
array[b]也就是第一行的内容,就算初始化逻辑正确,所有行也会打印完全相同的内容,无法输出二维坐标系。
修正后的代码
数组初始化函数
void inicialise(char* array, int width, int height, char ic) { for (int i = 0; i < height; i++) { if (i == height / 2) { for (int b = 0; b < width; b++) { // 增加行偏移计算 array[i * width + b] = 'x'; } } else { for (int b = 0; b < width; b++) { if (b == width / 2) { array[i * width + b] = 'y'; } else { array[i * width + b] = ic; } } } } }
坐标系打印函数
void draw(char* array, int w, int h) { for (int i = 0; i < h; i++) { for (int b = 0; b < w; b++) { // 增加行偏移计算 printf("%c", array[i * w + b]); } printf("\n"); } }
内容的提问来源于stack exchange,提问作者wybot
相关产品推荐
相关产品推荐

