2014-02-10 28 views
0
int main(void){ 
    char buffer[5] = {0}; 
    int i; 
    FILE *fp = fopen("haha.txt", "r"); 
    if (fp == NULL) { 
    perror("Failed to open file \"mhaha\""); 
    return EXIT_FAILURE; 
    } 
    for (i = 0; i < 5; i++) { 
     int rc = getc(fp); 
     if (rc == EOF) { 
      fputs("An error occurred while reading the file.\n", stderr); 
      return EXIT_FAILURE; 
     } 
    buffer[i] = rc; 
    } 
    fclose(fp); 
    printf("The bytes read were... %x %x %x %x %x\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]); 
    return EXIT_SUCCESS; 
} 

我把八个0我haha.txt文件,当我运行此代码,它总是给我:为什么我的getc()在C中输入0时总是返回30?

这些字节读是... 30 30 30 30 30

有人能告诉我为什么吗?

+4

因为'0'的ASCII码是'十六进制30'。 – AntonH

+1

在'printf'调用中将'%x'更改为'%c'。 – ouah

回答

2

因为 '0' ==的0x30

字符 '0' 是的0x30(ASCII)。

0

'0'您输入的文本文件被解释为char而不是int。现在,当您尝试在hex (%x)的值中打印char时,代码只会在hex中找到相应的char并打印出来。因此,你的'0' = 0x30。您也可以尝试在文本文件中给出'A'并将其打印为十六进制,您将得到'41',因为'A' = 0x41。 供您参考,AsciiTable

如果你想打印出到底是什么,你在文本文件中键入,然后只需改变你的printf("The bytes read were... %x %x %x %x %x\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]);

printf("The bytes read were... %c %c %c %c %c\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]); 
/* %c will tell the compiler to print the chars as char and not as hex values. */ 

您可能需要阅读Format SpecifiersMSDN Link

0

在您的printf中,您使用%x和此打印hexchar '0'等于48 in decimal,所以0x30 in hex

要打印0 in char你需要使用printf%c

相关问题