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

C语言只读模式打开文件空格显示异常、排版错乱如何修复?

问题成因
  • 变量类型错误:fgetc() 函数的返回值为 int 类型,你使用 char 类型存储返回值。如果编译环境中 char 为无符号类型,EOF(值为-1)会被转换为无符号正数,导致EOF判断逻辑失效,程序会读取到超出文件实际长度的垃圾值,最终出现乱码、排版错乱。
  • 制表符对齐差异:目标文件使用Tab制表符做列对齐,不同终端的默认Tab宽度(常见为4/8个字符)不统一,也会导致原本对齐的内容出现排版偏移。
  • 换行符编码差异:若文件是在Windows系统下生成,换行符为\r\n,在类Unix终端打印时多余的\r可能被识别为可打印字符,破坏原有格式。
修复方案
  1. 修正存储fgetc返回值的变量类型为int,确保EOF判断逻辑正确
  2. 可选:将读取到的Tab制表符替换为固定长度的空格,保证不同终端下排版一致
  3. 可选:如果需要完全保留文件原始字节输出,可使用二进制只读模式"rb"打开文件,避免系统自动转义换行符

修改后的参考代码:

#include <stdio.h>
#include <stdlib.h>

void CALchart()
{
    // 修改变量类型为int
    int ch3;
    // 可根据需要替换为"rb"使用二进制模式读取
    FILE *fp3 = fopen("calorieschart.txt", "r");
   
    if(fp3 == NULL)
    {
        printf("file doesn't exists");
        exit(1);
    }

    while((ch3 = fgetc(fp3)) != EOF)
    {
        // 可选:将Tab替换为4个空格,保证对齐
        if(ch3 == '\t') {
            printf("%s", "    ");
        } else {
            printf("%c", ch3);
        }
    }
    fclose(fp3);  
}

内容的提问来源于stack exchange,提问作者Onkar Chougule

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:12:04