2016-06-07 3 views
0

Я делаю простую игру для своего класса программирования. И мне не удается сохранить игру в двоичном файле, она пишет только букву координаты.Сохранение int в двоичный файл в c

INT число только один номер от 6 до 8. полукокса письма только одна буква от А до Я.

Я хочу координате появляться в файле как A1 ...

кого-ли знает, как это исправить?

Вот функция:

void makeLoad(FILE *f,char letter, int number){ 
    f = fopen("save.dat", "a+"); 
    if(f==NULL) { 
     printf("Erro no acesso ao ficheiro\n"); 
     return ; } 
     printf("%c\n", letter);//debug purposes 
     printf("%d\n", number);//debug purposes 

    fwrite(&letter,sizeof(letter),1,f); 
    fwrite(&number,sizeof(number),1,f); 

    fclose(f); 
    } 

Я ожидаю, что в конце, чтобы иметь последовательность пьес, как A1B3C5 Но я получаю только ABC ... числа не хватает между

Вот полный файл, если необходимо: http://pastebin.com/WzynZuaC

+0

Насколько большой выходной файл? Как вы исследуете его содержимое? Ожидаете ли вы найти номер в виде текста? – Dmitri

+0

Что вернуло 'fwrite'? – stackptr

+0

Я ожидаю, что в конце будет последовательность игр, таких как A1B3C5 ... – m3k3r1

ответ

0

Вот быстрый способ, которым вы можете это исправить, пока число только одна цифра:

char c = '0' + number; 
fwrite(&c,sizeof(c),1,f); 

Что вы делали, это записать двоичное представление вашего int в файл, что не совпадает с представлением ASCII. Например, двоичное представление символа «6» равно 00110110, тогда как двоичное представление int 6 равно 00000000000000000000000000000110. Вы записываете последнее в свой файл, когда хотите написать первое. Добавление «0» к числу добавляет 00110000, что дает правильное двоичное значение после неявного приведения символа.

уборщик способ исправить код, чтобы заменить FWRITE вызовы с помощью одного вызова fprintf, который делает всю работу за вас:

fprintf(f, "%c%d", letter, number); 
Смежные вопросы