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.