webForumDet fria alternativet

C++ uppgift jag inte får rätsida med

C/C++

2 svar · 548 visningar · startad av Joakim85

Medlem sedan nov. 20031 inlägg
Frågan#1

Hej :)

Min lärare har gett mig en skoluppgift, att skapa ett program som sparar klasslistor med elever i textfiler.
Hon har givit instruktionen att det skall skapas en struct för varje elev, och structen skall innehålla informationen förnamn, efternamn och födelsedatum.

Denna struct skall sedan lagras i en lista, tillsammans med andra structar, för alla andra elever man väljer att lägga till.

Och till sist så skall detta sparas ned i en textfil.

Allt sparande och hämtande har jag löst, de två enda bekymren jag har är att jag inte med detta upplägg på något sätt lyckats få min kod att sortera namnen först efter efternamn, och sedan även efter förnamn. Det vill sig helt enkelt inte.

Det andra problemet är att min storebror, som iofs erkänt att han inte är någon guru på c++ direkt, tycker att det verkar vara ett mycket underligt sätt att använda structar på.

Min lärare är inte heller så jättebra på att förklara eller hjälpa, och hennes förslag funkar inte ... hrmmm helt felfritt om man säger så, närmare bestämt inte alls :(

Jag bifogar koden i en vanlig text-fil då den kanske är lite för lång för att infoga på sidan.

Jag hoppas att någon kanske kan sprida något ljus över detta. Som det är nu kan man öppna en fil för läsning, varpå den skall sortera eleverna (sorterar både vid inmatning och när man hämtar från fil) men försöker man öppna en fil på nytt, så kraschar programmet, och sorteringen fungerar som sagt inte helt felfritt :(

Och om någon kan säga mig om läraren har en smart idé, eller om min storebror har rätt i att det ser knepigt ut, så skulle jag bli glad.

MVH Joakim

Medlem sedan juni 200010 432 inlägg
#2

Det andra problemet är att min storebror, som iofs erkänt att han inte är någon guru på c++ direkt, tycker att det verkar vara ett mycket underligt sätt att använda structar på.

Det är inget konstigt sätt att använda structar på, men det är 'c-style'.
För att jämföra två textsträngar bör du dock inte använda '>' utan istället strcmp . Men om du istället använder <string> utan .h så finns det annat att använda. För att sortera dina structar i nån form av ordning kan du använda exempelvis qsort som finns i stdlib.h, vilken du redan använder. För att använda qsort behöver du göra en egen jämförelsefunktion som kan jämföra två structar och returnera enligt de kriterier som står i länken. Denna jämförlelsefunktions adress skickar du med till qsort.

Ser att du förmodligen lagt ned en del jobb på det här, synd bara att din lärare inte verkar ge er direktiv om hur använda rätt includes. Verkar som en C-programmeringskurs där ni nyttjar C++? Blir lätt förvirrande... ;)

Medlem sedan juli 2002581 inlägg
#3

Det går utmärkt att jämföra strängar med <, eftersom du använder std:string.

För att sortera listan skapar du en jämförelsefunktion och anropar sort som är en medlemsfunktion till list. OBS! Du kan inte använda qsort, eftersom den bara fungerar med arrayer och inte listor (Det finns för övrigt ändå ingen anledning att använda qsort i C++, då den är det gamla C-alternativet och dessutom långsammare än std::sort).

bool jämförPersoner(const klass& a, const klass& b)
{
  if (a.efternamn == b.efternamn)
    return a.fornamn < b.fornamn;
  else
    return a.efternamn < b.efternamn;
}

//För att sortera din lista skriver du nu:

lKlass.sort( jämförPersoner );

Så enkelt är det. Du bör också inkludera <string>, för att hålla din kod uppdaterad med standarden.

250 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)