2016-07-23 3 views
-1

У меня возникают проблемы при попытке прочитать целое из текстового файла:возникли проблемы чтение целого числа из файла в C

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int op; 

    /* Open file for both reading and writing */ 
    FILE *d = fopen("intento1.txt", "r"); 
    FILE *f = fopen("bubbletry.txt", "w+"); 

    /* Read and display data */ 
    fread(&op, 4, 1, d); 

    printf("%d\n", &op); 
    fclose(d); 
    /* Write data to the file */ 
    fprintf(f,"%d\n",&op); 

    fclose(f); 

    return(0); 
} 

Первый номер в «intento1.txt» является 30771, но текст, написанный на «bubbletry.txt», равен 926363699. Не могли бы вы рассказать мне, почему это происходит?

ответ

3

Обычно для чтения целых чисел и т.п., вы можете использовать fscanf. Это намного удобнее, чем fread.

fscanf(fp, "%d", &n); 

Для примера, проверьте http://www.cplusplus.com/reference/cstdio/fscanf/

+0

Спасибо! : D это было очень полезно –

+1

fread - читать двоичные данные. fscanf предназначен для обработки двоичных данных как желаемого формата –

5

Поскольку вы читаете первые 4 байта intento1.txt, '3', '0', '7' '7', в целое число. '3' - 0x33, '0' - 0x30, '7' - 0x37. Таким образом, вы заканчиваете чтение в 0x33303737, но из-за того, что вы находитесь в архитектуре малого конца, байты меняются на 0x37373033, что является шестнадцатеричным представлением 926363699, азимутное представление которого вы печатаете в файл с fprintf.

Что нужно сделать, чтобы отсканировать целое число из представления ascii, либо потянув строку, либо преобразов ее, либо используя что-то вроде fscanf. Помните, что двоичное представление числа не совпадает с его представлением ASCII.

1

В дополнение к ответу на использование fread() вы не передали предполагаемые аргументы в свои функции правильно. В то время как fread() требует указателя в качестве аргумента (указывающего на переменную) для чтения, как, так и fprintf() требует значения (а не адрес!) Отформатированного аргумента для печати. Так же синтаксис передачи аргументов работает для обеих функций:

printf("%d\n", op); 

fprintf(f,"%d\n", op); 

Вы также можете найти полезным читающий эти SO сообщения: fread, reading text files with fread, fprintf.

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