Text in Array
-
Also..ich bin in der Lehre. Und ich habe ein wenig Rückstand in der C++ Programmierung, deshalb wechseln sich 2 MITARBEITER ab, um mir kleine Übungsaufgaben zu geben. Und ich muss jetzt gas geben, weil ich im Februar in der Schule ein Projekt habe.
Und dass dies auch geklärt ist.. der Mitarbeiter ist PROFI Programmierer und ich ANFÄNGER und ich habe seinen Auftrag falsch verstanden.
Ebenfalls bin ich mir das Leitprogramm "C++ in 21 Tagen" am durcharbeiten.
Und da ich jetzt beim Thema Arrays bin ist die Aufagbe entsprechend zu diesem Thema, inklusive aller Themen / Kapiteln vorher (Klassen, Schleifen...usw)
Un der Auftrag ist, dass ich eben zuerst einmal 5 Spieler eingebe und seine Eigenschaften in die Klasse übergebe.Hier die Code Abschnitte, so viel ich im Moment habe:
// main.cpp // Spielerverwaltung.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung. // #include "stdafx.h" #include <iostream.h> #include "Spielerverwaltung.h" int main(int argc, char* argv[]) { char Name[30]; int Rueckennummer; char Position[30]; int Alter; int Spielerzaehler = 0; do { CSpieler Spieler; cout << "Geben Sie die Rueckennummer eines YB Spielers ein:\n"; cin >> Rueckennummer; Spieler.SetRueckennummer(Rueckennummer); cout << "Geben Sie den Namen dieses YB Spielers ein:\n"; cin >> Name; Spieler.SetName(Name); cout << "Geben Sie die Position dieses YB Spielers an:\n"; cin >> Position; Spieler.SetPosition(Position); cout << "Geben Sie das Alter dieses YB Spielers ein:\n"; cin >> Alter; Spieler.SetAlter(Alter); Spieler.PrintConsole(); Spielerzaehler++; }while (Spielerzaehler <= 5); return 0; }// Spielerverwaltung.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung. // #include "stdafx.h" #include <iostream.h> #include <string.h> #include "Spielerverwaltung.h" CSpieler::CSpieler() { } CSpieler::~CSpieler() { } void CSpieler::PrintConsole() { cout << "Der Spieler mit der Nummer " << m_Rueckennummer << " heisst " << m_Name << ", spielt als " << m_Position << "\nund ist " << m_Alter << " Jahre alt.\n"; } void CSpieler::SetName(char Name[]) { strcpy(m_Name,Name); } char CSpieler::GetName() { return m_Name[30]; } void CSpieler::SetRueckennummer(int Rueckennummer) { m_Rueckennummer = Rueckennummer; } int CSpieler::GetRueckennummer() { return m_Rueckennummer; } void CSpieler::SetPosition(char Position[]) { strcpy(m_Position,Position); } char CSpieler::GetPosition() { return m_Position1[30]; } void CSpieler::SetAlter(int Alter) { m_Alter = Alter; } int CSpieler::GetAlter() { return m_Alter; }//Spielerverwaltung.h // Spielerverwaltung.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung. // #if !defined(_Spielerverwaltung_H_) #define _Spielerverwaltung_H_ class CSpieler { private: char m_Name[30]; int m_Alter; char m_Position[30]; int m_Rueckennummer; public: CSpieler(); ~CSpieler(); void PrintConsole(); char GetName(); void SetName(char Name[]); char GetPosition(); void SetPosition(char Position[]); int GetRueckennummer(); void SetRueckennummer(int Rueckennummer); int GetAlter(); void SetAlter(int Alter); }; #endif // !defined(_Spielerverwaltung_H_)so...
so weit sei es gut sagte der Mitarbeiter.
Jetzt muss ich das gleiche mit 5 Spielern machen, aber dass am Ende alle 5 Spieler ausgegeben werden.
Jetzt war meine Frage, ob ich dies mit so vielen Member Variablen machen soll, sprich, für jeden Spieler.
Und dann auch für jeden Spieler eine Set/Get Methode.
Aber das würde ja viiiel Code geben,deshalb gibt es sicher eine andere Lösung...oder?Besten Dank für Ihre Geduld

Gruss Maethu
-
Nein. Du machst es ganz einfach so, du legst ein Array deiner Spieler an, ungefähr so:
CSpieler Spieler[5];Logischer Weiße machst du das vor deiner Do-While Schleife. Dann machst du aus der Do-While eine For-Schleife und lässt die Schleife über alle deine Spieler Elemente wandern.
-
Firefighter..danke!!!
Jetzt hat's endlich wieder klick gemacht.
Ich brauche einfach immer zuerst eine Wegleitung, danach klappts meistens..ich brauche einfach länger Zeit zum kapieren als andere :SMeinst du in etwa so?
// Spielerverwaltung.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung. // #include "stdafx.h" #include <iostream.h> #include "Spielerverwaltung.h" int main(int argc, char* argv[]) { char Name[30]; int Rueckennummer; char Position[30]; int Alter; CSpieler Spieler[5]; for (int Spielerzaehler = 0; Spielerzaehler <= 5; Spielerzaehler++) { cout << "Geben Sie die Rueckennummer eines YB Spielers ein:\n"; cin >> Rueckennummer; Spieler[Spielerzaehler].SetRueckennummer(Rueckennummer); cout << "Geben Sie den Namen dieses YB Spielers ein:\n"; cin >> Name; Spieler[Spielerzaehler].SetName(Name); cout << "Geben Sie die Position dieses YB Spielers an:\n"; cin >> Position; Spieler[Spielerzaehler].SetPosition(Position); cout << "Geben Sie das Alter dieses YB Spielers ein:\n"; cin >> Alter; Spieler[Spielerzaehler].SetAlter(Alter); Spielerzaehler++; } for (int Printzaehler = 0; Printzaehler <= 5; Printzaehler++) { Spieler[Printzaehler].PrintConsole(); Printzaehler++; } return 0; }Nur, was mir jetzt noch nicht klar ist, wieso dass er anstatt 5 Spieler nur 3 abfragt??? :S
Danke vielmals
-
Hab's gefunden..in der Schleife habe ich merkwürdigerweise 2 Mal inkrementiert..
Der Mitarbeiter ist soweit zufrieden.
Die nächste "Hürde" ist nun,dasselbe aber mit 2 Mannschaften zu machen,pro Mannschaft 5 Spieler.
Und wenn man die Spieler eingegeben hat muss den Benutzer gefragt werden, ob er von Mannschaft 1 oder 2 abfragen will, dann gibt der Benutzer die Rückennummer ein, und der entsprechende Spieler von der Mannschaft soll dann in der Konsole ausgegeben werden.
-
Maethu schrieb:
Nur, was mir jetzt noch nicht klar ist, wieso dass er anstatt 5 Spieler nur 3 abfragt??? :S
Danke vielmals
Genau so meinte ich das.Hier ist dein Fehler: In der For-Schleife, erhhöhst du doch deinen zähler schon, nämlich hier:
for (int Spielerzaehler = 0; Spielerzaehler <= 5; Spielerzaehler++)Weiter unten, eigentlich am Ende deiner For-Schleife, erhhöhst du deinen Zähler aber nochmal. somit ist die ganze sache 2 durchgänge zu früh fertig.
-
Danke, ich habe dies auch gleich gefunden..
Jetzt probiere ich, wie ich die Ausgabe mit der gewünschten Rückennummer machen kann.
Ich weiss zwar theoretisch wie...aber praktisch noch nicht.
-
Na dann erklär doch mal, wie du es dir Theoretisch vorstellst.Anhand dieser Überlegung können wir dann eventuell schon sagen, ob das Sinn macht oder nicht.
-
Übrigens ich habe noch eine 2. Mannschaft eingebaut
int main(int argc, char* argv[]) { char Name[30]; int Rueckennummer; char Position[30]; int Alter; int Mannschaftswahl; int Rueckennummerwahl; CSpieler Spieler[10]; for (int YBzaehler = 0; YBzaehler <= 4; YBzaehler++) { cout << "Geben Sie die Rueckennummer eines YB Spielers ein:\n"; cin >> Rueckennummer; Spieler[YBzaehler].SetRueckennummer(Rueckennummer); cout << "Geben Sie den Namen dieses YB Spielers ein:\n"; cin >> Name; Spieler[YBzaehler].SetName(Name); cout << "Geben Sie die Position dieses YB Spielers an:\n"; cin >> Position; Spieler[YBzaehler].SetPosition(Position); cout << "Geben Sie das Alter dieses YB Spielers ein:\n"; cin >> Alter; Spieler[YBzaehler].SetAlter(Alter); } for (int FCBzaehler = 5; FCBzaehler <= 9; FCBzaehler++) { cout << "Geben Sie die Rueckennummer eines YB Spielers ein:\n"; cin >> Rueckennummer; Spieler[FCBzaehler].SetRueckennummer(Rueckennummer); cout << "Geben Sie den Namen dieses YB Spielers ein:\n"; cin >> Name; Spieler[FCBzaehler].SetName(Name); cout << "Geben Sie die Position dieses YB Spielers an:\n"; cin >> Position; Spieler[FCBzaehler].SetPosition(Position); cout << "Geben Sie das Alter dieses YB Spielers ein:\n"; cin >> Alter; Spieler[FCBzaehler].SetAlter(Alter); } return 0; }Also..ich werde fragen von welcher Mannschaft der Benutzer gerne auswählen will..
cout << "Wenn Sie von YB einen Spieler suchen wollen druecken Sie '1' fuer FCB '2'.\n"; cin >> Mannschaftswahl;Wenn Mannschaftsauswahl 1 sei, soll im Spieler Array von 0-4 gesucht werden, wenn die Auswahl 2 ist, soll im Spieler Array 5-9 gesucht werden.
Dann frage ich welche Rückennummer dieser Spieler hat.
cout << "Welche Rueckennummer traegt der gewuenschte Spieler?\n"; cin >> Rueckennummerwahl;Jetzt soll er vom entsprechenden Bereich im Array nach dieser Rückennummer suchen, wenn er diese gefunden hat, soll der Spieler mit dieser Rückennummer mit allen Elementen ausgegeben werden.
Aber mir ist nicht ganz klar, was alles im Spieler[] Array "gespeichert" ist.
Also ich weiss nicht genau, wo dann diese Rückennummer ist und wie man dann "sucht".
-
Erstell dir doch 2 Arrays welche jeweils 5 Spieler halten können. Das eine für die Mannschaft das andere für die Mannschaft.
Sobald du dann die Mannschaften zugewiesen hast. Kannst du in deiner For-Schleife auf die Rückennummer jeweils so zugreifenSpieler_Mannschaft_A[i].GetRueckennummer(); Spieler_Mannschaft_B[i].GetRueckennummer();Dafür hast du dir ja die Getter gebaut.
-
Und was ist dann mit dem Objekt CSpieler Spieler[10]?
Wieder normal wie am Anfang, CSpieler Spieler? Oder wie meinst du das?
-
so meine ich das eigentlich.
CSpieler Mannschaft_A[5]; CSpieler Mannschaft_B[5]; //uswUnd mit den array arbeitest du dann. Wobei ein Vector natürlich angenehmer und sicherer ist, aber das lassen wir mal außen vor.
-
Ah okey, das wären dann 2 Objekte.
Der Mitarbeiter hat mir drum gesagt, mit einem Objekt.
Einfach CSpieler Spieler soll so bleiben. Also so wie vorhin wie du mir gesagt hast, mit Arrays im Objekt.
-
Irgendwie in der Art habe ich mir das vorgestellt..nur habe ich ein ziemliches durcheinander..wie muss ich im inneren if schrieben, dass er auf die Rueckennumemrauswahl prüft und dann die richtige ausgibt?
if (Mannschaftswahl == 1) { for (int YBauswahlzaehler = 0; YBauswahlzaehler <= 4; YBauswahlzaehler++) { Spieler[YBauswahlzaehler].GetRueckennummer(); if (Spieler[YBauswahlzaehler] == Rueckennummerwahl) { cout << Spieler[YBauswahlzaehler]; } } } if (Mannschaftswahl == 2) { for (int FCBauswahlzaehler = 5; FCBauswahlzaehler <= 9; FCBauswahlzaehler++) { Spieler[Auswahlzaehler].GetRueckennummer(); if (Spieler[FCBauswahlzaehler] == Rueckennummerwahl) { cout << Spieler[FCBauswahlzaehler]; } } }
-
Beinahe richtig.
if (Mannschaftswahl == 1) { for (int YBauswahlzaehler = 0; YBauswahlzaehler <= 4; YBauswahlzaehler++) { int Rueckennummerwahl = Spieler[YBauswahlzaehler].GetRueckennummer(); if (Spieler[YBauswahlzaehler] == Rueckennummerwahl) { cout << Spieler[YBauswahlzaehler]; } } } if (Mannschaftswahl == 2) { for (int FCBauswahlzaehler = 5; FCBauswahlzaehler <= 9; FCBauswahlzaehler++) { int Rueckennummerwahl_mannschaft2 = Spieler[YBauswahlzaehler].GetRueckennummer(); if (Spieler[FCBauswahlzaehler] == Rueckennummerwahl_mannschaft2) { cout << Spieler[FCBauswahlzaehler]; } } }
-
Hm..ich komme gerade nicht so draus.
Wieso machst du noch einen int Rueckennummerwahl und einen int Rueckennummerwahl_mannschaft2 ?
den int Rueckennummerwahl habe ich ja schon am Anfang vom main erstellt, dort wird die gwünschte Nummer, die der User eingibt, abgelegt.
Übrigens, meine Vorschlagsversion hatte compilier Fehler. Bei deiner Version auch, geht nicht :S
-
Achso. du hattest das schon deklariert, naja das konnte ich ja nicht wissen
Dachte du hättest es vergessen. So du willst also vergleichen ob die eingegeben Zahl vom User mit einer rückenummer eines Spielers übereinstimmt?
-
Doch ich hatte es deklariert. Siehe meinen Post wo ich dir meine Theorie erklärt habe, dort ist das Prinzip..
Genau, der User muss ja die Mannschaft eingeben von welcher er nach einem Spieler mit einer gewissen Rückennummer suchen lassen will. Dann gibt der User die gewünschte Nummer ein und das Programm soll so (wie mein letzter Beispielcode) im richtigen Mannschaftsarraybereich nach dieser Rückennummer suchen, wenn diese gefunden wurde, soll dann der Spieler mit dieser Rückennummer mit all seinen Elementen ausgegeben werden..
Weisst du wie ich meine?
-
Firefighter, ich habe es jetzt so hingebracht, dass die richtige Rückennummer gefunden wurde, aber anstatt den ganzen Spieler mit allem drum und dran gibts mir bis jetzt nur die Rückennummer aus.
Was muss ich jetzt bei der cout Ausgabe ändern, dass eigentlich die PrintConsole() ausgeführt wird? (Bis jetzt habe ich keine Fehler)
Wenn ich Spieler[YBauswahlzaehler].GetRueckennummer() in Spieler[YBauswahlzaehler].PrintConsole() gibts Fehler und funktioniert nicht mehr. Was muss ich ändern?if (Mannschaftswahl == 1) { for (int YBauswahlzaehler = 0; YBauswahlzaehler <= 4; YBauswahlzaehler++) { if (Spieler[YBauswahlzaehler].GetRueckennummer() == Rueckennummerwahl) { cout << Spieler[YBauswahlzaehler].GetRueckennummer() << "\n"; } } } if (Mannschaftswahl == 2) { for (int FCBauswahlzaehler = 5; FCBauswahlzaehler <= 9; FCBauswahlzaehler++) { if (Spieler[FCBauswahlzaehler].GetRueckennummer() == Rueckennummerwahl) { cout << Spieler[FCBauswahlzaehler].GetRueckennummer() << "\n"; } } }
-
Ich habs.
if (Mannschaftswahl == 1) { for (int YBauswahlzaehler = 0; YBauswahlzaehler <= 4; YBauswahlzaehler++) { if (Spieler[YBauswahlzaehler].GetRueckennummer() == Rueckennummerwahl) { Spieler[YBauswahlzaehler].PrintConsole(); } } } if (Mannschaftswahl == 2) { for (int FCBauswahlzaehler = 5; FCBauswahlzaehler <= 9; FCBauswahlzaehler++) { if (Spieler[FCBauswahlzaehler].GetRueckennummer() == Rueckennummerwahl) { Spieler[FCBauswahlzaehler].PrintConsole(); } } }jetzt fehlt mir nur noch die Ausgabe, "Falsche Auswahl" Wenn die Rückennummer nicht vorhanden ist.
Allerdings klappt es nicht, dies einzubauen, dass diese Meldung auch nur in diesem Fall und nicht bei jedem Durchlauf der Schleife, bei dem es noch nicht übereinstimmt, erscheint.
Weisst du Rat?