Hallo wir haben von unseren Informatiklehrer eine Gruppenhausaufgabe
bekommen, die wir eigentlich alleine Lösen sollten.
Nun fällt unser Unterricht allerdings aus (Lehrer wird sehr lange Krank
sein) und die Hausaufgaben werden nun nicht mehr abgegeben, deshalb
wollte ich hier einmal fragen, wie man auf die Lösung kommt, bzw was an
dem unteren Code* falsch läuft
Aufgabe:
In der Datei “staedte.csv” sind die Städte eines Bundeslands, das
Bundesland selbst und die Anzahl der Bewohner dieser
Städte, getrennt durch Semikolons, aufgelistet.
Schreibe ein Programm, das für ein gegebenes Bundesland alle Städte
findet, in denen mindestens eine vorgegebene
Anzahl n an Menschen leben. Die Ausgabe soll mit Hilfe der Funktion
write_file in die Datei “resultat.txt” erfolgen,
und für jeden Eintrag eine Zeile enthalten, die das Format Die Stadt
Nürnberg hat 505664 Einwohner. befolgt. Zur
Vereinfachung kannst du davon ausgehen, dass die Länge dieses Strings
niemals 100 Zeichen überschreitet.
In dieser Aufgabe sollen das Bundesland und die Anzahl n als Parameter
direkt beim Aufruf des Programms übergeben
werden. Einen beispielhaften Aufruf mit Parametern kannst du in Listing
2 Zeile 3 sehen. In C stehen die übergebenen
Parameter als char** argv zur Verfügung. In argv[1] und argv[2] werden
jeweils das erste und das zweite
Argument übergeben. (argv[0] ist für den Programmnamen reserviert.)
Verfügbarer Code:
intput3.c (darf nicht verändert werden)
sprintf(jg[cc_jg],"Die Stadt %s hat %d Einwohner.",staedte[i],bewohner[i]);
48
cc_jg++;
49
}
50
}
51
52
// Mithilfe von write_file(...) soll das Ergebnis in die "resultat.txt"
53
write_file(jg,cc_jg);
54
55
// Dynamisch allozierter Speicher muss hier freigegeben werden.
56
for(intl=0;l<cc;l++){
57
free(jg[l]);
58
}
59
free(jg);
60
return0;
61
}
Der Code an sich müsste funktionieren, nur wird keine TxT erstellt, also
irgendwas stimmt dort nicht.
Ich weiß es ist viel, aber ihr seht die Probleme doch bestimmt schneller
als wir:)
Mit freundlichen Grüßen
Anja
Fehler, der allerdings die Funktion nicht beeinträchtigt: du allozierst
in jg[i] "len" Arrays, gibst davon aber unten nur "cc" wieder frei.
Eigentlich wolltest du wohl auch nur "cc" allozieren.
Effizienter lässt sich das machen, indem man den Vergleich nicht zweimal
laufen lässt, sondern bei jeden Treffer zuerst das entsprechende Array
jg[i] alloziert und danach mit sprintf() füllt. Dann brauchst du nur
eine der Variablen "cc" und "cc_jg".
Jörg W. schrieb:> Hmm, hier funktioniert es:> $ ./main 250000 Hessen> $ cat resultat.txt> Die Stadt Wiesbaden hat 275976 Einwohner.> $ ./main 250000 Sachsen> $ cat resultat.txt> Die Stadt Dresden hat 523058 Einwohner.> Die Stadt Leipzig hat 522883 Einwohner.>> Fehler, der allerdings die Funktion nicht beeinträchtigt: du allozierst> in jg[i] "len" Arrays, gibst davon aber unten nur "cc" wieder frei.> Eigentlich wolltest du wohl auch nur "cc" allozieren.>> Effizienter lässt sich das machen, indem man den Vergleich nicht zweimal> laufen lässt, sondern bei jeden Treffer zuerst das entsprechende Array> jg[i] alloziert und danach mit sprintf() füllt. Dann brauchst du nur> eine der Variablen "cc" und "cc_jg".
Hallo:)
Wie hast du das hinbekommen?
Bzw wie hast du es geschafft, dass du eine Eingabe hin bekommst? vlt
liegt da unser Problem.
Ui, danke ich werde es mal verbessern, soweit ich es bei mir zum laufen
bekomme.
Anja schrieb:> Bzw wie hast du es geschafft, dass du eine Eingabe hin bekommst?
Steht doch oben, die Eingabe erfolgt auf der Kommandozeile. War in der
Aufgabenstellung so gefordert.
Jörg W. schrieb:> Anja schrieb:>> Bzw wie hast du es geschafft, dass du eine Eingabe hin bekommst?>> Steht doch oben, die Eingabe erfolgt auf der Kommandozeile. War in der> Aufgabenstellung so gefordert.
Achso stimmt, leider benutze ich CodeBlocks, gibt es da eine Möglichkeit
dies so einzugeben?
Anja schrieb:> Jörg W. schrieb:>> Anja schrieb:>>> Bzw wie hast du es geschafft, dass du eine Eingabe hin bekommst?>>>> Steht doch oben, die Eingabe erfolgt auf der Kommandozeile. War in der>> Aufgabenstellung so gefordert.>> Achso stimmt, leider benutze ich CodeBlocks, gibt es da eine Möglichkeit> dies so einzugeben?
Hat funktioniert, ich bedanke mich und wünsche noch eine gute Nacht
Jemand schrieb:> Was haben eigentlich Semikolons in einer CSV-Datei verloren?
In deutscher Umgebung mehr als üblich, da das Komma bei uns
Dezimaltrenner ist. Trotzdem nennt sie deshalb niemand SSV-Datei. ;-)