You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用ncurses.h从文件加载二维char数组并用mvprintw()打印问题

问题根源与修复方案

核心问题

你读取地图文件时没有处理每行末尾的换行符:文本文件中每行30个地图字符后会存在换行标记(Windows系统为\r\n,类Unix系统为\n),你当前的双层循环每轮固定读取30个字符才切换行,会把上一行的换行符作为下一行的首个元素存入地图数组,导致所有内容逐行偏移错位。

其他可优化点

  • 读取文件仅需只读权限,不用开r+读写模式,改为r更合理
  • 建议增加文件打开失败的判空逻辑,避免文件不存在时程序崩溃

修复代码

读取部分修改:

mapfile = fopen(mapname, "r");
// 新增文件判空逻辑
if (mapfile == NULL) {
    return;
}
for (int row = 0; row < height; row++) {
    for (int col = 0; col < width; col++) {
        char c = fgetc(mapfile);
        // 跳过所有换行/回车符,只读取有效地图字符
        while (c == '\n' || c == '\r') {
            c = fgetc(mapfile);
        }
        map[row][col] = c;
    }
    // 读完当前行所有有效字符后,丢弃剩余的换行标记
    int skip;
    while((skip = fgetc(mapfile)) != '\n' && skip != EOF);
}
fclose(mapfile);

打印部分验证

当前打印逻辑的规则本身没问题,读取逻辑修复后,点号替换为空格、不同字符对应不同颜色的效果都会正常显示。


内容的提问来源于stack exchange,提问作者Jakub Kolesár

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:15:03