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
相关产品推荐
相关产品推荐

