2016-06-07 21 views
0

Ich mache ein einfaches Spiel für meine Programmierklasse. Und ich habe Probleme, das Spiel in einer Binärdatei zu speichern, es schreibt nur den Buchstaben der Koordinate.Int in Binärdatei in c speichern

int Zahl ist nur eine Zahl von 6 bis 8. char Brief ist nur einen Buchstaben von A bis J.

ich dergleichen A1 auf Datei erscheinen koordinieren wollen ...

Hat jemand weiß, wie man es repariert?

Hier ist die Funktion:

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); 
    } 

Ich bin am Ende einer Folge von Stücken wie A1B3C5 haben erwartet aber ich bekomme nur ABC ... die Zahlen zwischen

Hier fehlen wenn die vollständige Datei benötigt: http://pastebin.com/WzynZuaC

+0

Wie groß ist die Ausgabedatei? Wie untersuchen Sie seinen Inhalt? Erwarten Sie, die Nummer als Text zu finden? – Dmitri

+0

Was kam 'fwrite' zurück? – stackptr

+0

Ich erwarte am Ende eine Sequenz von Spielen wie A1B3C5 ... – m3k3r1

Antwort

0

Hier ist eine schnelle Art und Weise man es beheben kann, solange die Zahl nur eine Ziffer ist:

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

Was Sie getan haben, ist das Schreiben der binären Darstellung Ihres Int in die Datei, die nicht die gleiche wie die ASCII-Darstellung ist. Zum Beispiel ist die binäre Darstellung des Zeichens '6' 00110110, während die binäre Darstellung des int 6 0000000000000000000000000000000110 ist. Sie schreiben letzteres in Ihre Datei, wenn Sie die erstere schreiben wollen. Hinzufügen von "0" zu Nummer fügt 00110000 hinzu, das den richtigen binären Wert nach der impliziten Umwandlung zu einem Zeichen gibt.

Der Reiniger Weg, um Ihren Code zu beheben, ist die Fwrite Anrufe mit einem einzigen fprintf Aufruf zu ersetzen, die für Sie die ganze Arbeit tut:

fprintf(f, "%c%d", letter, number);