Inmatning/utmatning av information till/från en binärfil
Hej!
Jag har en uppgift att skapa ett bilregister med information om fordonen samt ägaren. Programmet ska avslutas när man skriver in 0.
Problemet jag har är att när jag skriver in informationen så sparas den inte trots att min funktionskod är ämnad att spara den till en binärfil.
main-filen:
I case 1 så finns all information som användaren måste skriva in.
Nedan kommer koden till funktionen som skall spara informationen till en binärfil. Problemet som uppstår dock är att mitt program inte vill skriva ut det.
Här är funktionen för att skriva ut hela registret från binärfilen men som tidigare nämnt så skriver den inte ut någonting utan den bara startar om min while-loop.
Min fråga är ju då hur jag ska fixa det här problemet.
Jag har hört att malloc() och calloc() skulle kunna användas men jag har ingen aning om hur jag ska implementera det i koden i såna fall...
Går det där att kompilera? Funktionen laggtill tar ju ett argument.
Laguna skrev:Går det där att kompilera? Funktionen laggtill tar ju ett argument.
Kompileringen går igenom
lite kommentarer
Det är inte bra stil att deklarera en variabel med _t på slutet, normalt använder man det för typer. byt namn på typen och variabeln
använd typedef för typer, det är bekvämare
typedet struct
{
...
} fordon_t;
fgets
läser upp till size, men den lägger också till en \n om den läser färre tecken, du bör nog ta bort det tecknet.
Istället för att ha olika konstanter för fgets, använd sizeof på arrayen
fget(fordon.marke, sizeof(fordon.marke),stdin);
Ta bort fflush(stdin)
anropen, i bästa fall gör den inget, i värsta fall kan den få ditt program att krasha.(Undefined behavior).
Byt argumenten till funktionerna till att vara pekare istället för struct, annars blir structen kopierad.
void laggtill(fordon_t* fordon);
Du måste skicka med din variabel fordon
(förut : fordon_t) som argument till din funktion laggtill för att den skall veta vad som skall skrivas
fordon_t fordon;
...
laggtill(&fordon)
När du skriver en bil till registret i laggtill, använd fopen(..., "ab")
istället så att det läggs till, "wb" öppnar filen och börjar skriva från början.
int fordonsregister(bilar); // returnerar antalet bilar funna
fordon_t bilar[10];
antal = fordonsregister(bilar);
...
fordon_t fordon;
...
laggtill(&fordon);
antal = fordonsregister(bilar); // nu är antal+1