dynamische struktur arrays
-
#include "stdafx.h"
struct datum
{
int tag;
char monat[10];
int jahr;
};struct kategorie
{
int lauflaenge;
float laufzeit;
};typedef struct wettkampf
{
struct datum zeitpunkt;
struct kategorie daten;
char ort[51];
};wettkampf eingabeNeuerWettkampfDaten()
{
wettkampf help;
system("cls");
cout << "NEUE WETTKAMPFDATEN" << endl;
cout << "Bitte geben Sie den Tag ein (int): ";
cin >> help.zeitpunkt.tag;
cout << "Bitte geben Sie den Monat ein (int): ";
cin >> help.zeitpunkt.monat;
cout << "Bitte geben Sie das Jahr ein (int): ";
cin >> help.zeitpunkt.jahr;
cout << "Bitte geben Sie die Laufzeit ein (float): ";
cin >> help.daten.laufzeit;
help.daten.lauflaenge = 100;return help;
}void neuerWettkampf(wettkampf **liste, int *anz)
{
(*anz)++;
liste[*anz-1]= new wettkampf;
wettkampf help = eingabeNeuerWettkampfDaten();
liste[*anz-1] = &help;
}int ausgabeAllerWettkampfdaten(wettkampf **liste, int anz)
{return 0;
}void main(void)
{
int anz = 0;
wettkampf *liste;
char auswahl;cout << "Beispiel zur Verwaltung der Wettkampfdaten eines Sportlers in einem dynamischen Strukturarray." << endl;
getche();do
{
system("cls");
cout << "1. Neuer Wettkampf\n" << endl;
cout << "2. Ausgabe aller Wettkampfdaten\n" << endl;
cout << "3. Ausgabe spezieller Wettkampfdaten\n" << endl;
cout << "4. Ausgabe aller Bestzeiten\n" << endl;
cout << "5. Ende\n" << endl;
cout << "Bitte Auswahl eingeben: " << endl;
auswahl = getche();switch(auswahl)
{
case '1': neuerWettkampf(&liste, &anz); break;
case '2': ausgabeAllerWettkampfdaten(&liste,anz); break;
case '3': break;
case '4': break;
}}
while (auswahl != '5');}
BITTE HILFE SOBALD ICH DAS ZWEITE MAL WETTKAMPFDATEN EINGEBE HÄNGT ALLES
thx angelus2snd
-
So, damit sich das mal jemand auch durchließt (Code Tags)
zuerst mal nur mit kommentaren
#include <iostream> using namespace std; struct datum { int tag; char monat[10]; //wieso nicht std::string? int jahr; }; struct kategorie { int lauflaenge; float laufzeit; }; typedef struct wettkampf //willst du sicher ohne typedef haben, oder? (achtung, rhetorische frage) { struct datum zeitpunkt; //struct extra anzugeben ist nicht nötig struct kategorie daten; //dito char ort[51]; //ein string ist toll }; wettkampf eingabeNeuerWettkampfDaten() { wettkampf help; system("cls"); //unportabel! cout << "NEUE WETTKAMPFDATEN" << endl; cout << "Bitte geben Sie den Tag ein (int): "; cin >> help.zeitpunkt.tag; cout << "Bitte geben Sie den Monat ein (int): "; cin >> help.zeitpunkt.monat; cout << "Bitte geben Sie das Jahr ein (int): "; cin >> help.zeitpunkt.jahr; cout << "Bitte geben Sie die Laufzeit ein (float): "; cin >> help.daten.laufzeit; help.daten.lauflaenge = 100; return help; //du gibst by value zurück. könnte eventuell etwas langsamer //sein aber noch erträglich. } void neuerWettkampf(wettkampf **liste, int *anz) { (*anz)++; //wieso nicht anz als referenz übergeben? liste[*anz-1]= new wettkampf; //sicher, dass liste[*anz-1] auch existiert? wettkampf help = eingabeNeuerWettkampfDaten(); liste[*anz-1] = &help; //du bist witzig... zuerst machst du einen //neuen wettkampf 2 zeilen weiter oben, und jetzt nimmst du dir einfach einen //lokalen vom stack? ->crash ist vorprogrammiert... } int ausgabeAllerWettkampfdaten(wettkampf **liste, int anz); void main(void) //es soll heißen int main. void main gibt es nicht. { int anz = 0; wettkampf *liste; //aha, wie ich mir gedacht habe. du stellst speicher //für einen einzigen zeiger zur verfügung, benutzt ihn aber wie ein array //kann nicht gutgehen. //mach lieber so was wie wettkampf **liste = new wettkampf * [ANZAHL]; //oder arbeite am besten mit den STL-Containern! char auswahl; cout << "Beispiel zur Verwaltung der Wettkampfdaten eines Sportlers in einem dynamischen Strukturarray." << endl; getche(); //auch unportabel... do { system("cls"); //siehe weiter oben... cout << "1. Neuer Wettkampf\n" << endl; cout << "2. Ausgabe aller Wettkampfdaten\n" << endl; cout << "3. Ausgabe spezieller Wettkampfdaten\n" << endl; cout << "4. Ausgabe aller Bestzeiten\n" << endl; cout << "5. Ende\n" << endl; cout << "Bitte Auswahl eingeben: " << endl; auswahl = getche(); //quiek.. ist aber nicht das schlimmste hier in dem code... switch(auswahl) { case '1': neuerWettkampf(&liste, &anz); break; case '2': ausgabeAllerWettkampfdaten(&liste,anz); break; case '3': break; case '4': break; } } while (auswahl != '5'); }
ups... solltest dir vielleicht noch ein Buch kaufen...