Problem bei einem vergleich Zeiger mit charwert???



  • Hallo,

    Ich habe für bibstudent als Hilfe folgendes Prog geschrieben. Habe aber ein Problem beim loeschen eines einzelnen Kursteilnehmers aus der Liste.
    Hier erstmal der gesamte Code:

    #include <iostream.h>
    
    // Struktur für teilnehmer
    struct teilnehmer {
            char vorname[30];
            char nachname[30];
            char kurs[30];
            teilnehmer* next;
            teilnehmer* last;
    };
    
    // Zeiger auf den Anfang der liste
    teilnehmer* anfang;
    
    // Zeiger auf ende der Liste
    teilnehmer* ende;
    // hilfszeiger zum wandern
    teilnehmer* hilfszeiger;
    
    //Initialisieren der Liste
    void init(){
            char inivorname[30];
            char ininachname[30];
            char inikurs[30];
            anfang=new(teilnehmer);
            anfang->next = NULL;
            anfang->last = NULL;
            cout << "Bitte geben Sie den Vornamen des ersten Kursteilnehmers an: "<< endl;
            cin >> inivorname;
            strcpy(anfang->vorname,inivorname);
            cout << "Bitte geben Sie jetzt den Nachnamen an: " << endl;
            cin >> ininachname;
            strcpy(anfang->nachname,ininachname);
            cout << "Jetzt bitte noch die Kursbezeichnung: " << endl;
            cin >> inikurs;
            strcpy(anfang->kurs,inikurs);
    }
    
    // Funktion zum einfuegen neuer Teilnehmer
    void einfuegen(){
            char neuvorname[30], neunachname[30], neukurs[30];
            hilfszeiger = anfang;
            while(hilfszeiger->next != NULL) {
                    hilfszeiger = hilfszeiger->next;
            }
            // neuer Teilnehmer
            hilfszeiger->next = new(teilnehmer);
            hilfszeiger->next->last= hilfszeiger;
            // hilfszeiger auf das neue Listenelement
            hilfszeiger = hilfszeiger->next;
            // Daten ins neue Element eintragen
            cout << "Bitte geben Sie den Vornamen des Kursteilnehmers an: "<< endl;
            cin >> neuvorname;
            strcpy(hilfszeiger->vorname,neuvorname);
            cout << "Bitte geben Sie jetzt den Nachnamen an: " << endl;
            cin >> neunachname;
            strcpy(hilfszeiger->nachname,neunachname);
            cout << "Jetzt bitte noch die Kursbezeichnung: " << endl;
            cin >> neukurs;
            strcpy(hilfszeiger->kurs,neukurs);
            hilfszeiger->next = NULL;
            ende=hilfszeiger;
    }
    
    void anzeigen(){
            // hilfszeiger auf ersten Teiilnehmer
            hilfszeiger= anfang;
            cout << hilfszeiger->vorname << " " << hilfszeiger->nachname << " " << hilfszeiger->kurs << endl;
            while (hilfszeiger->next != NULL) {
                    // nächstes Element
                    hilfszeiger= hilfszeiger->next;
                    cout <<hilfszeiger->vorname << " " << hilfszeiger->nachname << " " << hilfszeiger->kurs << endl;
            }
    }
    
    void loeschenalles(){
            while (anfang != NULL){
                    hilfszeiger = anfang;
                    anfang = anfang->next;
                    delete(hilfszeiger);
            }
    }
    
    void loescheneinzeln(){
            hilfszeiger = anfang;
            char loeschennachname[30];
            char abfrage;
            cout << " Bitte geben Sie den Nachnamen des Teilnehmers ein der geloescht werden soll: " << endl;
            cin >> loeschennachname;
            while (hilfszeiger->nachname != loeschennachname){
                    hilfszeiger= hilfszeiger->next;
            }
            cout << hilfszeiger->vorname<<" " << hilfszeiger->nachname << " " <<hilfszeiger->kurs << endl << endl;
            cout << "moechten Sie diesen Datensatz wirklich loeschen?" << endl;
            cout << "Druecken j fuer ja oder n fuer nein!" <<endl << endl;
            cin>> abfrage;
            if (abfrage == 'j'){
            hilfszeiger->next->last = hilfszeiger->last;
            hilfszeiger->last->next = hilfszeiger->next;
            delete(hilfszeiger);
            }
    }
    
    void main(){
            char eingabe;
            init();
            do{
                    cout << "Was moechten Sie als naechstes tun?" <<endl << endl;
                    cout << "Druecken Sie a zum erfassen eines neuen Teilnehmers!" << endl;
                    cout << "Druecken Sie b um sich alle Teilnehmer anzeigen zu lassen!" << endl;
                    cout << "Oder c um einzelne Teilnehmer zu loeschen," << endl;
                    cout << "oder d um alle Teilnehmer zu loeschen! " << endl;
                    cout << "Druecken Sie e um das Programm zu beenden!" << endl << endl;
                    cin >> eingabe;
                    switch(eingabe){
                            case 'a':
                                    einfuegen();
                                    break;
                            case 'b':
                                    anzeigen();
                                    break;
                            case 'c':
                                    loescheneinzeln();
                                    break;
                            case 'd':
                                    loeschenalles();
                                    break;
                    }
            }while(eingabe != 'e');
            loeschenalles();
            char p[50];
            cin.getline(p,50);
    }
    

    Jetzt die Funktion die mir Probleme macht:

    void loescheneinzeln(){
            hilfszeiger = anfang;
            char loeschennachname[30];
            char abfrage;
            cout << " Bitte geben Sie den Nachnamen des Teilnehmers ein der geloescht werden soll: " << endl;
            cin >> loeschennachname;
            while (hilfszeiger->nachname != loeschennachname){
                    hilfszeiger= hilfszeiger->next;
            }
            cout << hilfszeiger->vorname<<" " << hilfszeiger->nachname << " " <<hilfszeiger->kurs << endl << endl;
            cout << "moechten Sie diesen Datensatz wirklich loeschen?" << endl;
            cout << "Druecken j fuer ja oder n fuer nein!" <<endl << endl;
            cin>> abfrage;
            if (abfrage == 'j'){
            hilfszeiger->next->last = hilfszeiger->last;
            hilfszeiger->last->next = hilfszeiger->next;
            delete(hilfszeiger);
            }
    }
    

    Laut Compiler bringt das Programm den Fehler in der while Schleife. Anscheinend kann der Compiler die angegebenen "Werte" nicht vergleichen.
    Konkret: while (hilfszeiger->nachname != loeschennachname){
    hilfszeiger = hilfszeiger->next;
    }

    So wollte ich den Nachnamen des Teilnehmers in der Liste finden der gelöscht werden soll.

    Hat jemand von euch dazu ne Idee oder nen Vorschlag?

    Die 2te Sache die mich interessiert. ...Kann ich es in der Funktion anzeigen() irgendwie einbauen das mir die Liste nach Nachnamen albhabetisch sortiert wird?

    Danke schon mal an alle!



  • Du musst die Werte afaik mit strcmp(char*, char*) vergleichen. D.h.: (Ungetestet)

    while (strcmp(hilfszeiger->nachname, loeschennachname) != 0)
    {
         hilfszeiger = hilfszeiger -> next;
    }
    

    Caipi



  • Caipi schrieb:

    Du musst die Werte afaik mit strcmp(char*, char*) vergleichen. D.h.: (Ungetestet)

    while (strcmp(hilfszeiger->nachname, loeschennachname) != 0)
    {
         hilfszeiger = hilfszeiger -> next;
    }
    

    Caipi

    So funktionierts:

    while (strcmp(hilfszeiger->nachname,loeschennachname)){
                    hilfszeiger= hilfszeiger->next;
            }
    

    Wenn jetzt noch einer ne Idee wegen der Sortierfunktion hat...
    Das wär doch mal was.

    🙂



  • Heißer Tip! Benutz std::string!



  • MaSTaH schrieb:

    Heißer Tip! Benutz std::string!

    Ich glaube er programmiert in reinem C.



  • iostream.h schrieb:

    MaSTaH schrieb:

    Heißer Tip! Benutz std::string!

    Ich glaube er programmiert in reinem C.

    Was ist dann so schwer daran ins richtige Forum zu posten? 🙄

    Btw, void main suckt!



  • iostream.h schrieb:

    MaSTaH schrieb:

    Heißer Tip! Benutz std::string!

    Ich glaube er programmiert in reinem C.

    eigentlich programmiere ich in C++. Habe nur erst vor kurzem angefangen.

    Kann einer für mein Programm ein konkretes Beispiel für die anzeigen funktion geben? Wie man die Liste alphabetisch nach Nachnamen sortiert.


Anmelden zum Antworten