2014-02-10 27 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

相關問題