C: Inlämningsuppgift 8, Länkade listor

I den här inlämningsuppgiften ska du arbeta med poster, hoplänkade med hjälp av pekare till vad man kallar en länkad lista.

I en tidigare version av den här uppgiften fanns ytterligare en deluppgift, men vi stryker den ur den obligatoriska inlämningsuppgiften. Om man vill göra den frivilligt, finns en beskrivning här.

Bakgrund

Som vi känner till från en serie dokumentärfilmer som visats på bio, finns det terminatorer som styrs av en dator som heter Skynet. Här är några terminatorer av den första, mer experimentella modellen:

Några terminatorer

Datorn Skynet, som råkar vara programmerbar i C, har problem med att hålla reda på sina terminatorer. Därför ska vi hjälpa den genom att skriva ett program som den kan köra.

Varje terminator har en typbeteckning, till exempel T-800 eller T-1000, och ett unikt identitetsnummer, till exempel 17 eller 238746. Terminatorerna kan också råka ut för skador, eftersom hänsynslösa människor vandaliserar dem. Därför kan varje terminator ha ett antal skaderapporter, som anger de skador just den terminatorn fått i sin termineringsverksamhet, men skaderapporterna ingår inte i den här uppgiften.

Specifikation

Programmet ska från en fil (eller, om man vill, standardinmatningen) kunna läsa rader av den här typen:
TERMINATOR  T-800  123
Inmatningen ska avslutas med filslut. Raderna ska kunna skrivas i fritt format, dvs man ska kunna ha ett eller flera blanktecken mellan varje ord på raden.

När alla data lästs in ska en lista skrivas ut som anger vilka terminatorer som finns.

Skriv ett program som läser in rader enligt ovan från en fil (eller, om man vill, standardinmatningen), och som lagrar information om terminatorerna i länkade listor enligt figuren nedan. Posterna skapas med anrop till malloc.

En länkad lista

Godtyckligt många terminatorer ska kunna lagras, så länge de får plats i datorns minne. Namnet på en terminatortyp, som "T-800", kan vara högst tio tecken långt. Tänk på att du måste allokera en extra plats för strängavslutningstecknet '\0'.

Felaktiga rader ska ge ett felmeddelande, och sen ska programmet fortsätta utan att bry sig om den felaktiga raden.

Om du inte känner dig helt säker på hur du ska lösa uppgiften, kan det vara bra att först göra ett förslag på hur din datastruktur ska se ut, med deklarationer av posttyperna (struct), och visa denna för läraren.

Testfiler: testfil-1.txt med 100 terminatorer, testfil-2.txt med en miljon terminatorer (nu i korrekt version!)

Redovisning

Programmet redovisas genom att det uppvisas och provkörs för läraren. Läser du kursen på distans skickar du källkoden (.c-filen) med e-post. Det behövs ingen skriftlig rapport för den här uppgiften, men källkoden ska vara bra.


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 9 mars 2016