Problem mit Array (War: Hi all)



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • könnt ihr mir mal so seiten zeigen, wo ich beispiele sehen kann oder sonstige nützliche informationen?



  • www.cppreference.com für eine gute (aber nicht unbedingt komplette) Übersicht, würde ich sagen.

    Ansonsten vielleicht eines der hier im Forum vorgeschlagenen Onlinetutorials.

    Ach, und zu guter Letzt sollte das Buch "Thinking in C++" Ban 1 und 2 von Bruce Eckels komplett online verfügbar sein (www.bruceeckels.com oder so ähnlich, etwas googln einfach) Da gibt es auch genügend Beispiele und ne nette Übersicht über die gebräuchlichsten Sachen.



  • vielen dank



  • Trotz dieser ganzen vorschläge möchte ich erstmal die grundlegenden Sachen machen.

    case 3:
    				{		
    					system("cls");
    
    					for(zaehler2=0;zaehler2<5;zaehler2++)
    					{
    						system("cls");
    						cout<<"Geben Sie den Nachnamen ein =>";
    						cin>>mensch_liste[zaehler2].suchname;
    
    						if(mensch_liste[zaehler2].suchname == mensch_liste[zaehler].nachname)
    						{
    							cout<<"Es wurden folgende Namen gefunden!";
    							gotoxy(5,20);
    							cout<<mensch_liste[zaehler2].suchname;
    						}
    
    						cout<<"\n\nWollen Sie weitere Daten suchen(j/n) => ";
    						cin>>entscheidung1;
    
    						if(entscheidung1== 'j')
    						{
    							zaehler=4;
    						}
    						else
    						{
    
    						}
    					}
    					break;
    				}
    

    Ich möchte den nachnamen suchen den ich davor eingegeben habe?? wie funzt das?



  • Seh dir mal auf dem obigen Link std::find() an.

    Zusätzlich brauchst du vielleicht noch eine COmparator Klasse:

    struct VergleicheNachname{
        bool operator()(const mensch& m1,const mensch& m2){
            return m1.nachname==m2.nachname;
        }
    };
    

    Die musst du mit an find übergeben.

    Ich garantiere absolut nicht für Korrektheit, falls es falsch ist bitte sagen.

    (PS: das struct mensch wäre vielleicht besser global, imho)

    EDIT: struct war class... danke DanielPB



  • Und das ganze noch public machen!



  • Grml, irgendwie in letzter Zeit zu oft class geschrieben... Danke, habs editiert.



  • Hi Leute

    Also die eingabe, Ausgabe und die Suche meiner Datenfelder hab ich bereits.
    Doch ich habe keine Ahnung wie ich diese sortieren soll.
    ich möchte die eingegeben daten erstmal ausgeben (unsortiert und dann im selben menue sortiert ausgeben

    Wie geht das??

    struct mensch{	char nachname[20];
    					char vorname [20];
    					char email   [30];
    					int geburtsjahr;};
    	mensch mensch_liste[5];
    
    	int wahl;
    	int anzahl=0;
    	const int durchlauf=5;
    
    	char nachname1[20];
    	char entscheidung2;
    	bool entscheidung;
    
    	do
    	{
    		system("cls");
    		textcolor(LIGHTGREEN);
    		gotoxy(32,6);
    		cout<<"Werbung";
    		textcolor(LIGHTGRAY);
    		gotoxy(32,8);
    		cout<<"Eingabe   (1)";
    		gotoxy(32,9);
    		cout<<"Ausgabe   (2)";
    		gotoxy(32,10);
    		cout<<"Suchen    (3)";
    		gotoxy(32,11);
    		cout<<"Sortieren (4)";
    		gotoxy(32,13);
    		cout<<"Waehlen Sie => ";
    		cin>>wahl;
    
    		switch(wahl)
    		{	//Eingabe
    			case 1:
    			{
    								//0				//5
    				for(int zaehler=anzahl;zaehler<durchlauf;zaehler++)
    				{
    					system("cls");
    					cout<<"Geben Sie ihren Vornamen ein      =>";
    					cin>>mensch_liste[zaehler].vorname;
    					cout<<"Geben Sie ihren Nachnamen ein     =>";
    					cin>>mensch_liste[zaehler].nachname;
    					cout<<"Geben Sie ihre E-Mail- Adresse an =>";
    					cin>>mensch_liste[zaehler].email;
    					cout<<"Geben Sie ihr Geburtsjahr an      =>";
    					cin>>mensch_liste[zaehler].geburtsjahr;
    
    					anzahl=zaehler+1;
    						//0+1=1<5
    					if(zaehler+1<durchlauf)
    					{
    						cout<<"\n\nWeitere Namen eingeben (j/n) ?         : ";
    						cin>>entscheidung2;
    
    						if(entscheidung2=='n')
    						{
    							// Wenn entscheidung=nein,wird zaehler auf 5 gesetzt.
    							zaehler=durchlauf;
    						}
    					}
    				}	
    				break;
    			}
    			//Ausgabe
    			case 2:
    			{
    				system("cls");
    				anzahl=0;
    
    				for(int zaehler=anzahl;zaehler<durchlauf;zaehler++)
    				{
    					gotoxy(1,1*zaehler+7);
    					cout<<mensch_liste[zaehler].nachname;
    					gotoxy(15,1*zaehler+7);
    					cout<<mensch_liste[zaehler].vorname;
    					gotoxy(30,1*zaehler+7);
    					cout<<mensch_liste[zaehler].email;
    					gotoxy(65,1*zaehler+7);
    					cout<<mensch_liste[zaehler].geburtsjahr;
    
    					if(zaehler+1<durchlauf)
    					{
    						gotoxy(1,13);
    						cout<<"Weiter zum nächsten Namen (j/n) ? : ";
    						cin>>entscheidung2;
    
    						if(entscheidung2=='n')
    						{	
    							zaehler=durchlauf;
    						}
    					}
    				}
    				break;
    			}
    			//Suchen
    			case 3:
    			{		
    				system("cls");
    				anzahl=0;
    
    				cout<<"Geben Sie den Nachnahmen an => ";
    				cin>>nachname1;
    								//0				//5
    				for(int zaehler=anzahl;zaehler<durchlauf;zaehler++)
    				{
    					if(strcmp(mensch_liste[zaehler].nachname,nachname1)==0)
    					{
    						cout<<"\nNachnamen       : "<<mensch_liste[zaehler].nachname;
    						cout<<"\nVornamen        : "<<mensch_liste[zaehler].vorname;
    						cout<<"\nGeburtsjahr     : "<<mensch_liste[zaehler].geburtsjahr;
    						cout<<"\nE-mail addresse : "<<mensch_liste[zaehler].email;	
    					}
    				}
    				break;
    
    //sortieren			}
    case 4:
    {
    break;
    }
    


  • Für sortieren wird dir std::sort ganz nützlich sein. Wenn du immer nach dem gleichen Kriterium sortierst kannst du dazu den operator< überladen

    bool operator<(const mensch& m1,const mensch& m2){
        //Wann ist ein mensch "kleiner" (also soll in der Liste weiter vorne stehen) als ein anderer?
    }
    

    Ansonsten wieder einen Comperator wie oben, der diesmal ausgibt, welches der beiden kleiner ist.

    Hilft das?

    (PS: den Code habe ich mir jetzt nicht nochmal ganz durchgelesen)



  • kannst du ditt mal so schreiben das das zu mein programm passt vielleicht versteh ich es ja dann eher, weil die ganzen begriffe da sind mir neu



  • bool operator<(const mensch& m){
       return strcmp(nachname,m.nachname)<0;
    }
    

    Das da fügst du IN dein struct mensch ein.

    sort(mensch_liste,mensch_liste+5);
    

    Das da wo sortiert werden soll.

    Ichg bin mir nicht ganz sicher, versuch mal ob es funktionniert. Wenn nichgt bitte melden mit Fehlerbeschreibung und dem geänderten Teil deines Codes.



  • struct mensch{	char nachname[20];
    					char vorname [20];
    					char email   [30];
    					int geburtsjahr;
    					bool operator<(const mensch& m1,const mensch& m2){
        return m1.nachname<m2.nachname;};
    
    	mensch mensch_liste[5];
    
    case 4:
    			{
    				system("cls");
    				anzahl=0;
    
    				textcolor(LIGHTRED);
    				cout<<"Unsortierte Liste";
    				textcolor(LIGHTGRAY);
    
    				for(int zaehler=anzahl;zaehler<durchlauf;zaehler++)
    				{
    					sort(mensch_liste,mensch_liste+5);
    
    					gotoxy(1,1*zaehler+7);
    					cout<<mensch_liste[zaehler].nachname;
    					gotoxy(15,1*zaehler+7);
    					cout<<mensch_liste[zaehler].vorname;
    					gotoxy(30,1*zaehler+7);
    					cout<<mensch_liste[zaehler].email;
    					gotoxy(65,1*zaehler+7);
    					cout<<mensch_liste[zaehler].geburtsjahr;
    				}
    
    				break;
    			}
    

    meinst du dit so???



  • Kaum habt ihr mal conio.h gefunden glaubt ihr echt man müsste alles damit machen -.- Man nervt das...
    Ich beziehe mich auf:

    system("cls");
            textcolor(LIGHTGREEN);
            gotoxy(32,6);
            cout<<"Werbung";
            textcolor(LIGHTGRAY);
            gotoxy(32,8);
            cout<<"Eingabe   (1)";
            gotoxy(32,9);
            cout<<"Ausgabe   (2)";
            gotoxy(32,10);
            cout<<"Suchen    (3)";
            gotoxy(32,11);
            cout<<"Sortieren (4)";
    

    ... das geht auch mit nem std::endl und nem \t ...



  • das ist hier doch sowas von hose man?
    ich bin anfänger und möchte grund auf lern wie das alles funktioniert, brauche keine klugscheißer.

    ich brauche welche die mir mit einfachen mitteln erklären können wie das geht auf das Wissen welches ich bisher besitzte.



  • struct mensch{    char nachname[20];
                        char vorname [20];
                        char email   [30];
                        int geburtsjahr;
                        bool operator<(const mensch& m2){ //hier was geaendert
        return nachname<m2.nachname;};  //und da was geaendert
    
        mensch mensch_liste[5];
    

    Nein, ich mein es so. Darum habe ich extra die Funktion nochmnal geschrieben.

    btw: Unfreundlichkeit andern Forumsmitgliedern gegenueber, die dich auf etwas hinweisen wollen, was du vielleicht aendern solltest, wird dir auf lange Zeit nichts bringen.


Anmelden zum Antworten