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

fgetc函数读取文件返回值异常:预期为1却得到49

问题解答:fgetc读取字符得到ASCII值而非字符本身

嘿,这其实是个非常常见的小误区,你完全不用困惑!

你遇到的情况是因为**fgetc()函数返回的是读取字符的ASCII码值**,而不是字符本身。文件里的字符"1"对应的ASCII码正好是49,所以变量k拿到的就是这个数值。

怎么解决这个问题?

有两种简单的处理方式:

  • 如果你想直接输出字符,把printf的格式符从%d改成%c就行,这样会自动把ASCII码转换成对应的字符显示。
  • 或者你可以把k强制转换成char类型再输出,效果是一样的。

修改后的示例代码

#include <stdio.h>
#include <stdlib.h>
int main() {
    int k;
    FILE* rede = fopen("/home/leocal/Desktop/Poli/2018-1/Numérico/EP1/Redes/1_Stevenson/a.txt", "r");
    if (rede == NULL) {
        printf("Couldn't open file\n");
        return 1;
    }
    k = fgetc(rede);
    if (k!=EOF) {
        // 方式1:用%c格式符输出字符
        printf("printing k as char: %c\n", k);
        // 方式2:强制转换为char后输出
        printf("printing k as converted char: %c\n", (char)k);
        // 也可以同时输出ASCII值和字符,方便理解
        printf("ASCII value of '1' is: %d, corresponding char: %c\n", k, k);
    }
    fclose(rede);
    return 0;
}

补充说明

为什么fgetc()要用int类型来接收返回值呢?因为它需要返回EOF(一个在stdio.h里定义的特殊整数值,通常是-1)来表示文件读取结束,而char类型可能无法正确存储这个负值(如果是无符号char的话),所以用int是标准且安全的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:46:22