Arrays werden nicht gespeichert



  • Hallo zsm,
    bisher konnte ich mir immer selbst ganz gut helfen.
    Saß heute an einem kleinem Pogramm, was als Afg. für die Technikerschule zu machen ist. Im laufe des Abends habe ich es hinbekommen.
    Datensätze laut Arrayspeicher eingegeben und habe auch alle entsprechend ausgewertet bekommen. Sprich, zu jeder eingegeben Person, wurden mir alle Daten angezeigt.
    Plötzlich gings nimmer. Ich habe keine Ahnung warum. Es wird immer nur der erste Datensatz erkannt. Für Person 2 schon nimmer.

    Hoffe, mir kann da jmd auf die Sprünge helfen.

    #include <iostream> // einbinden der Bibliothek für die Ausgabe Cout
    #include <conio.h> // einbinden der Bibliothek für getch()
    #include <string>
    using namespace std; // Benutze den Namensraum "std"

    int main()
    
    {
    	const int anz=2;
    	string Name[anz], Vorname[anz];
    	int Telnummer[anz];
    	int GebDatum[anz];
    	int suche;
    	string SuchN;
    	string SuchVN;
    	int Erneut;
    	int z=0, merk=0;
    
    for (z=0; z<anz; z++)
    	{
    	cout<<"Geben sie einen Namen ein\n";
    	cin>> Name[z];
    	cout<<"Geben sie einen Vornamen ein\n";
    	cin>> Vorname[z];
    	cout<<"Geben sie eine Telefonnummer ein\n";
    	cin>> Telnummer[z];
    	cout<<"Geben sie ein Geburtsdatum ein DDMMYYYY\n";
    	cin>> GebDatum[z];
    	}
    
    start:
    	cout <<"Welcher Datensatz zur Personensuche soll verwendet werden?\n\nDruecke \n  [1] fuer -Name- \noder \n  [2] fuer -Vorname- "<<endl;
    	cin >> suche;
    	if (suche ==1)
    		{ 
    			cout << "Nach welchem Namen soll gesucht werden?\n";
    			cin >> SuchN;
    			for (z=0; z<anz; z++)
    		      {
    				if (SuchN == Name[z])
    			    { 
    				merk = z;
    				cout << "Folgender Datensatz wurde gefunden"<<"\n"<< "Name:" << Name[merk] <<"\n"<< "Vorname:" << Vorname[merk]<<"\n"<< "Telefonnummer:" << Telnummer[merk]<<"\n"<< "Geburtsdatum:" << GebDatum[merk]<<"\n"<<"\n";
    				}
    				if (SuchN != Name[z])
    				{
    				cout <<"Datensatz nicht gefunden. Name unbekannt!\n";
    				}
    				cout <<"Wollen Sie eine neue Suche starten?\nGeben Sie [1] fuer Ja, oder [2] fuer Nein ein \n";
    				cin >> Erneut ;
    				if (Erneut == 1)
    				{
    				goto start;
    				}
    				else 
    				return 0;
    
    			  }
    		}
    
    if (suche ==2)
    		{ 
    			cout << "\nNach welchem Vornamen soll gesucht werden?\n";
    			cin >> SuchVN;
    			for (z=0; z<anz; z++)
    		      {
    				if (SuchVN == Vorname[z])
    			    { 
    				merk = z;
    				cout << "Folgender Datensatz wurde gefunden\n"<<"\n"<< "Name:" << Name[merk] <<"\n"<< "Vorname:" << Vorname[merk]<<"\n"<< "Telefonnummer:" << Telnummer[merk]<<"\n"<< "Geburtsdatum:" << GebDatum[merk]<<"\n"<<"\n";
    				}
    				if (SuchVN != Vorname[z])
    				{
    				cout << "\n"<<"Datensatz nicht gefunden. Vorname unbekannt\n";
    				}
    				cout << "\n"<<"Wollen Sie eine neue Suche starten?\nGeben Sie [1] fuer Ja, oder [2] fuer Nein ein \n";
    				cin >> Erneut ;
    				if (Erneut == 1)
    				{
    				goto start;
    				}
    				else 
    				return 0;
    
    			  }
    		 }
    
    }
    


  • Wenn ich's richtig sehe, läuft die for-Schleife

    for( z = 0; z<anz; z++ )
    

    in deiner start-Schleife immer nur 1x durch. Denn entweder wird das programm beendet (return 0) oder du fängst die Suche von vorne an, sodass natürlich auch die for-Schleife wieder von vorne beginnt.

    Im Übrigen verwendet man goto nicht.



  • Die for-S steht ja über den Auswertungen. Ohne diese, ist z immer nur 1, weil er keine Zählbedingungn definiert.



  • Hallo,

    editiere mal deinen Beitrag und füge C++-Tags hinzu - dann ist dein Code für uns besser lesbar und wir können dir auch einfacher helfen.



  • Danke Th69 für den Hinweis. Hoffe, so ists recht?
    LG



  • grinsefuchs schrieb:

    Danke Th69 für den Hinweis. Hoffe, so ists recht?
    LG

    Hast du deinen Fehler inzwischen gefunden?
    Wandle mal deine goto-Schleife in eine do-while-Schleife um.



  • out schrieb:

    grinsefuchs schrieb:

    Danke Th69 für den Hinweis. Hoffe, so ists recht?
    LG

    Hast du deinen Fehler inzwischen gefunden?
    Wandle mal deine goto-Schleife in eine do-while-Schleife um.

    Danke für den Hinweis. Hatte ich auch schon gemacht. Ändert sich nix.

    Das Programm lief ja. Iwo muss ich ne Klammer verschoben haben, um die MErker zu umgehen. Seitdem gehts nimmer. Gehe also davon aus, das es "nur" an einer { liegt. Sehe wahrscheinlich den Wald vor lauter Bäumen nicht.
    -----------------
    Nochmal die Situation grob erklärt.
    Ich starte das Programm. In der jetzigen Config gebe ich 2 Datensätze ein. Sprich 2x Name, 2x Vorname usw.
    Danach wird nach Suchkriterium gefragt. Name oder Vorname. Den 1ten Datensatz zeigt er mir komplett mit zugehöriger und Gebdatum an. Den zweiten findet er nicht.Entsprechend

    cout <<"Datensatz nicht gefunden. Name unbekannt!\n"
    

    .
    Und das kann ich nimmer nachvollziehen. Warum der Datensatz nicht mehr gefunden wird.
    Die Abfragen, wonach gesucht werden soll, ob eine erneute Suche ausgeführt werden soll, der goto...alles funktioniert perfekt. Nur leider mit dem 1ten Datensatz.



  • out hat es doch oben schon geschrieben. Du springst jedesmal mit einem goto aus der laufenden schleife raus und beginnst deshalb die schleife jedesmal bei 0.

    edit:

    Besser wäre es in der Schleife nur zu suchen und die Ausgabe und Frage nach einer weiteren Suche erst nach der Schleife zu machen.



  • Benutze einen Debugger.



  • Hab mal ein paar Dinge überarbeitet:

    #include <iostream>	// einbinden der Bibliothek für die Ausgabe Cout 
    #include <conio.h>	// einbinden der Bibliothek für getch() 
    #include <string>	
    using namespace std;	// Benutze den Namensraum "std" 
    
    int main( )
    {
    	const int anz = 2;
    	string Name[ anz ], Vorname[ anz ];
    	int Telnummer[ anz ];
    	int GebDatum[ anz ];
    
    	for( int z = 0; z<anz; z++ )
    	{
    		cout<<"Geben sie einen Namen ein\n";
    		cin>> Name[ z ];
    		cout<<"Geben sie einen Vornamen ein\n";
    		cin>> Vorname[ z ];
    		cout<<"Geben sie eine Telefonnummer ein\n";
    		cin>> Telnummer[ z ];
    		cout<<"Geben sie ein Geburtsdatum ein DDMMYYYY\n";
    		cin>> GebDatum[ z ];
    	}
    
    	int Erneut = 0;
    	do 
    	{
    		cout <<"Welcher Datensatz zur Personensuche soll verwendet werden?\n\nDruecke \n [1] fuer -Name- \noder \n [2] fuer -Vorname- "<<endl;
    		int suche = 0;
    		cin >> suche;
    
    		bool gefunden = false;
    		int merk;
    
    		if( suche==1 )
    		{
    			cout << "Nach welchem Namen soll gesucht werden?\n";
    			string SuchN;
    			cin >> SuchN;
    			for( int z = 0; z<anz; z++ )
    			{
    				if( SuchN == Name[ z ] )
    				{
    					gefunden = true;
    					merk = z;
    				}
    			}
    		}
    		else if( suche == 2 )
    		{
    			cout << "\nNach welchem Vornamen soll gesucht werden?\n";
    			string SuchVN;
    			cin >> SuchVN;
    			for( int z = 0; z<anz; z++ )
    			{
    				if( SuchVN == Vorname[ z ] )
    				{
    					gefunden = true;
    					merk = z;
    				}
    			}
    		}
    
    		if( gefunden == true )
    		{
    			cout << "Folgender Datensatz wurde gefunden\n"<<"\n"<< "Name:" << Name[ merk ] <<"\n"<< "Vorname:" << Vorname[ merk ]<<"\n"<< "Telefonnummer:" << Telnummer[ merk ]<<"\n"<< "Geburtsdatum:" << GebDatum[ merk ]<<"\n"<<"\n";
    		}
    		else
    		{
    			cout <<"Datensatz nicht gefunden. Name unbekannt!\n";
    		}
    
    		cout <<"Wollen Sie eine neue Suche starten?\nGeben Sie [1] fuer Ja, oder [2] fuer Nein ein \n";
    		cin >> Erneut;
    	}
    	while( Erneut==1 );
    	return 0;
    }
    

    Versuch das mal nachzuvollziehen und schreib, wenn du was nicht verstehst.



  • Ein paar Klammern verschoben, den goto raus genommen und ans Ende gepackt.
    Jetzt läufts.
    Danke. Hier mal der richtige Code, wenn jmd vergleichen möchte..

    #include <iostream>													// einbinden der Bibliothek für die Ausgabe Cout
    #include <conio.h>													// einbinden der Bibliothek für getch()
    #include <string>	
    using namespace std;												// Benutze den Namensraum "std" 
    
    int main()
    
    {
    	const int anz=2;
    	string Name[anz], Vorname[anz];
    	int Telnummer[anz];
    	int GebDatum[anz];
    	int suche;
    	string SuchN;
    	string SuchVN;
    	int Erneut;
    	int z=0, merk=0;
    
    	for (z=0; z<anz; z++)
    	{
    	cout<<"Geben sie einen Namen ein\n";
    	cin>> Name[z];
    	cout<<"Geben sie einen Vornamen ein\n";
    	cin>> Vorname[z];
    	cout<<"Geben sie eine Telefonnummer ein\n";
    	cin>> Telnummer[z];
    	cout<<"Geben sie ein Geburtsdatum ein DDMMYYYY\n";
    	cin>> GebDatum[z];
    	}
    
    	start:
    	cout <<"Welcher Datensatz zur Personensuche soll verwendet werden?\n\nDruecke \n  [1] fuer -Name- \noder \n  [2] fuer -Vorname- "<<endl;
    	cin >> suche;
    	if (suche ==1)
    		{ 
    			cout << "Nach welchem Namen soll gesucht werden?\n";
    			cin >> SuchN;
    			for (z=0; z<anz; z++)
    		      {
    				if (SuchN == Name[z])
    			    { 
    				merk = z;
    				cout << "Folgender Datensatz wurde gefunden\n"<<"\n"<< "Name:" << Name[merk] <<"\n"<< "Vorname:" << Vorname[merk]<<"\n"<< "Telefonnummer:" << Telnummer[merk]<<"\n"<< "Geburtsdatum:" << GebDatum[merk]<<"\n"<<"\n";
    				if (SuchN != Name[z])
    				{
    				cout <<"Datensatz nicht gefunden. Name unbekannt!\n";
    				}
    				}				
    			  }
    		}
    
    	if (suche ==2)
    		{ 
    			cout << "\nNach welchem Vornamen soll gesucht werden?\n";
    			cin >> SuchVN;
    			for (z=0; z<anz; z++)
    		      {
    				if (SuchVN == Vorname[z])
    			    { 
    				merk = z;
    				cout << "Folgender Datensatz wurde gefunden\n"<<"\n"<< "Name:" << Name[merk] <<"\n"<< "Vorname:" << Vorname[merk]<<"\n"<< "Telefonnummer:" << Telnummer[merk]<<"\n"<< "Geburtsdatum:" << GebDatum[merk]<<"\n"<<"\n";
    				if (SuchVN != Vorname[z])
    				{
    				cout << "\n"<<"Datensatz nicht gefunden. Vorname unbekannt\n";
    				}
    				}
    
    			  }
    		 }
    
    				cout <<"Wollen Sie eine neue Suche starten?\nGeben Sie [1] fuer Ja, oder [2] fuer Nein ein \n";
    				cin >> Erneut ;
    				if (Erneut == 1)
    				{
    				goto start;
    				}
    				else 
    				return 0;
    
    }
    


  • grinsefuchs schrieb:

    E den goto raus genommen und ans Ende gepackt.

    Nicht ans Ende packen.
    Ganz weg. Du sollst ohne goto auskommen.

    Dafür gibt es Schleifen.

    Eine Telefonnummer ist keine Ganzzahl. (Auch nicht ohne Vorzeichen).
    Wie willst du Nummern mit Vorwahlen abspeichern?

    Ein Datum ist auch keine Ganzzahl.
    (Und wenn, dann ist dein Format falsch. Mit JJJJMMTT kann man zumindest sortieren)

    Mit #include werden auch keine Bibliotheken eingebunden.
    Damit erhählt der Compiler nur Informationen über die Bibliothek.

    Dein Einrückungsstil ist grauenhaft.



  • Deklariere Variablen erst, wenn du sie benötigst. Die Variable "merk" wird zwar verwendet, ist aber überflüssig, weil du gleich "z" verwenden könntest.

    Versuche Wiederholungen zu vermeiden:

    {
      merk = z;
      cout << "Folgender Datensatz wurde gefunden...
      // usw...
    

    Hast du mal versucht, die Meldung "Datensatz nicht gefunden" zu erhalten?



  • Wollte mich erstmal für die Beteiligung aller hier bedanken.
    Ja, das Programm gibt jetzt die Datenmeldung richtig raus usw. Tut was es soll.

    Zu meinem Stil, ich muss mich erst seit 1/2 Jahr mit der ganzen Programmierthematik beschäftigen. Hatte 0 Wissen über c++ oder sonst irgend ne Programmiersprache.
    Von daher sieh es mir bitte nach. Die Stunden, die ich c++ habe, laufen ab nach dem Motto "Probieren Sie doch erstmal" 😉 Und das mache ich.
    Natürlich werde ich solche Hinweise in Zukunft versuchen zu berücksichtigen.

    Mir wegen, -close-



  • grinsefuchs schrieb:

    Tut was es soll.

    Tut es nicht.

    temi schrieb:

    Hast du mal versucht, die Meldung "Datensatz nicht gefunden" zu erhalten?


Anmelden zum Antworten