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

逐字符读取文件:探究文件读写过程中的文本格式问题

文件读写中文本格式的直观分析

你想搞清楚文件读写过程里文本格式的细节,用g++编译运行代码来逐个查看字符的ASCII值,这个思路实在太直观了!

先把你用到的代码补全一下(加上必要的文件打开、错误判断和关闭操作,方便其他读者直接复刻):

#include <bits/stdc++.h>

int main() {
    FILE* fptr = fopen("input.txt", "r"); // 替换成你的输入文件名
    if (!fptr) {
        perror("Failed to open file");
        return 1;
    }
    
    while(!feof(fptr)) { // fptr为输入文件指针
        int i = fgetc(fptr);
        printf("%c - %d\n", i, i);
    }
    
    fclose(fptr);
    return 0;
}

你的输入文件内容是spaces and newlines,从输出结果来看,这段代码完美帮你把可见字符和不可见的格式字符都"拆解开"了:

  • 普通字母比如s对应ASCII值115,p对应112,这些都是你能直接看到的字符
  • 输出里的- 32对应输入里的空格字符(ASCII编码32),也就是单词之间的空白
  • 输出里的- 10对应换行符(ASCII编码10),如果你的输入文件里包含换行,这个值就会出现——它是文本里用来实现换行的不可见控制字符

另外顺便提个实用小细节:while(!feof(fptr))这个写法有个常见小坑——feof函数是在读取操作失败后才会设置文件结束标志,所以循环可能会在文件末尾多读一次,输出EOF对应的ASCII值-1。如果想避免这个问题,可以改成先读取再判断的写法:

int i;
while ((i = fgetc(fptr)) != EOF) {
    printf("%c - %d\n", i, i);
}

这样就能精准遍历文件里的每一个字符啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:25:01