Schreiben ein Programm, das Daten aus einer Textdatei liest und gibt sie in eine binäre Datei. Ich bin mir ziemlich sicher, dass ich die Datei richtig lese, weil, wenn ich die Informationen drucke, es richtig herauskommt. Das Schreiben in die Binärdatei ist jedoch falsch. Jede Zeile der Textdatei lautet:Schreiben in Binär-Datei
Vorname Nachname id gpa
Wo die Vor- und Nachnamen sind Strings von maximal 255 Zeichen, die ID ist ein unsigned 4-Byte-Ganzzahl, und die gpa ist eine 4-Byte-Gleitkommazahl. Ich habe es aus der Datei lesen und die richtigen Informationen drucken, aber es ist etwas falsch mit der Ausgabedatei. Es kommt fast 1,5 KB für eine Textdatei, die nur 61 Byte war. Was ist falsch an meinem Code?
#include <stdio.h>
#include <stdlib.h>
int textToBinary()
{
FILE * textfile = fopen("t2.txt", "r"); //Open and read text file
FILE * binfile = fopen("t2tobin.bin", "wb"); //Open writable bin file
unsigned char firstName[256];
unsigned char lastName[256];
unsigned int id;
float gpa;
char nLine[]= "\n";
char space[]= " ";
if(NULL == textfile) //alerts and exits if binfile is not found
{
fprintf(stderr, "Failed to open file\n");
fflush(stderr);
exit(1);
}
//implement a loop to continue until the end of the file
while(fscanf(textfile, "%s %s %d %f", firstName, lastName, &id, &gpa)!= EOF){
//read one line of the text file
printf("%s %s %d %.1f\n", firstName, lastName, id, gpa); //print line information ((test))
//Writing information to binary file
fwrite(firstName, sizeof(firstName), 1, binfile);//first name
fwrite(space, sizeof(space), 1, binfile);//space
fwrite(lastName, sizeof(lastName), 1, binfile);//last name
fwrite(space, sizeof(space), 1, binfile);//space
fwrite(&id, sizeof(unsigned int), 1, binfile);//ID
fwrite(space, sizeof(space), 1, binfile);//space
fwrite(&gpa, 4, 1, binfile);//gpa
fwrite(nLine, sizeof(nLine), 1, binfile);//new line
}
fclose(binfile);
fclose(textfile);
return 0;
}
es erwartet wird, da jeder Schreib einer Zeichenfolge 256 Byte verwendet. Schreibe 6 davon, du bekommst 1,5Kb! beiseite: 'fwrite (& gpa, 4, 1, binfile)' => 'fwrite (& gpa, sizeof (float), 1, binfile)' –
1. Warum sind die Überprüfung Sie nicht die Rückgabewerte von 'fopen' - also die binabry ein. 2. Formatieren Sie den Code, um ihn lesbar zu machen. –
Verwenden Sie 'strlen' anstelle von' sizeof', wenn Sie mit 'fwrite' in die Datei schreiben. – redxef