Ich muss eine Zuordnung für eine Klasse machen, die ich nehme. Es ist eine einfache Telefonbuch-App in C, und ich habe ein wenig Probleme damit, da ich einige neue Sachen im Programm verwenden muss und der Abgabetermin ist ziemlich eng.Lesen und Schreiben einer Malloc'd-Liste von/zu einer Binärdatei
Ich schaute mich um und fand einige Antworten, aber jedes Mal kam ein neues auf. :)
Dies ist mein (vereinfachte) Programm:
typedef struct record
{
char fname[31];
char lname[31];
char tel[21];
struct record *next;
} record;
record *new_entry(record *first, char *fname, char *lname, char *tel)
{
record *new;
new=(record*) malloc(sizeof(record));
strcpy(new->fname, fname);
strcpy(new->lname, lname);
strcpy(new->tel, tel);
new->next=first;
}
void fileopen (char *db_file)
{
FILE *fp;
fp=fopen(db_file, "rb");
if (fp==NULL)
{
fp=fopen(db_file, "wb");
fclose(fp);
fp=fopen(db_file, "r+b");
}
}
int main
{
char db[51];
record *next = NULL;
printf("File: "); scanf("%s, db);
fileopen(db);
printf("First name: "); scanf("%s", fname);
printf("Last name: "); scanf("%s", lname);
printf("Phone number: "); scanf("%s", tel);
first=new_entry(*first, fname, lname, tel);
}
verließ ich die unwesentlichen Teile aus. Jetzt weiß ich, dass es nicht viel ist, aber mein Klassenleiter sagte, ich sollte Binärdateien verwenden, um die Daten zu speichern und wiederherzustellen. Aber ich bin wirklich verwirrt, wenn ich Fread und Fwrite benutzen soll.
Vielen Dank für die Lösung! Ich denke, ich beginne das Konzept zu verstehen. Das Programm speichert jetzt die Daten (Zumindest denke ich es, weil die Datei wächst, während ich weitere Daten hinzufüge.) Beim Starten einer neuen Binärdatei zeigt das Programm die Daten korrekt an, wenn ich sie anfordere, aber wenn ich sie schließe, und die gleiche Datei erneut öffnen, passiert nichts, wenn es versucht, die Kontakte aufzulisten.
Hier ist die (wieder vereinfacht, ich habe 10 Details in einem Datensatz in der aktuellen Zuordnung) offen Funktion:
record *open (char *db_file, record start)
{
FILE *fp
record *temp = start;
fp=fopen(db_file, "rb");
while (fread(temp, sizeof(rekord), 1, fp)>0)
{
fread(temp->fname, sizeof temp->fname, 1, fp);
fread(temp->lname, sizeof temp->lname, 1, fp);
fread(temp->tel, sizeof temp->tel, 1, fp);
temp=temp->next;
}
fclose(fp);
return temp;
}
Und in main(), die ich benutze:
start=open(db, start);
Die Erklärung Teil:
record *start=NULL;
Danke nochmal wenn jemand antwortet.
Was verwirrt Sie? – alk
Willkommen bei StackOverflow. Müssen Sie 'fread' und' fwrite' verwenden? Darf man 'fscanf' /' fprintf' benutzen? Auch hast du deine spezifische Frage vergessen, momentan ist dein Beitrag nur eine Problembeschreibung. – Zeta
add 'return new;' an das Ende von new_entry(). – wildplasser