2014-02-10 2 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; 
} 

я поставил восемь 0s в моем файле haha.txt, и когда я запускаю этот код он всегда дает мне:Почему мой getc() всегда возвращает 30, когда вход 0 в C?

Байт чтение были ... 30 30 30 30 30

Может кто-нибудь сказать мне, почему?

+4

Поскольку 'ASCII код 0' является' в шестнадцатеричном 30'. – AntonH

+1

Измените '% x' на'% c' в 'printf'. – ouah

ответ

2

потому, что '0' == 0x30

Символ '0' является 0x30 (ASCII).

0

'0', который вы ввели в свой текстовый файл, интерпретируется как char, а не как int. Теперь, когда вы пытаетесь напечатать это значение char в своем значении hex (%x), код просто находит эквивалент этого char в hex и печатает его.

Итак, ваш '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 Specifiers и MSDN Link.

0

В вашем printf вы используете %x и эту печать в hex. char '0' равен 48 in decimal, поэтому 0x30 in hex.

Для печати 0 in char вам нужно использовать printf с %c

 Смежные вопросы

  • Нет связанных вопросов^_^