3 svar
131 visningar
Hassoni123 behöver inte mer hjälp
Hassoni123 4
Postad: 28 dec 2022 15:29

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...

Laguna Online 30472
Postad: 28 dec 2022 15:57

Går det där att kompilera? Funktionen laggtill tar ju ett argument.

Hassoni123 4
Postad: 28 dec 2022 17:18
Laguna skrev:

Går det där att kompilera? Funktionen laggtill tar ju ett argument.

Kompileringen går igenom 

anders_k 237
Postad: 28 dec 2022 20:30 Redigerad: 28 dec 2022 20:53

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
Svara
Close