struct variablen mit einander vergleichen
-
Guten Morgen, ich versuche vergeblich, folgende Zeilen zu vergleichen:
if (mensch1.name == mensch2.name) { cout << mensch1.vorname << " & " << mensch2.vorname << " sind vermutlich verwandt." << endl; }
leider reagiert die Ausgabe nicht darauf. Etwas weiter unten im Code aber, wird folgendes ausgegeben:
else if (mensch1.alter == mensch2.alter) { cout << mensch2.vorname << " und " << mensch1.vorname << " sind gleich alt. " << endl; cout << "Es existiert kein Altersunterschied." << endl;
Muss ich noch etwas beachten, da ".alter" als int abgespeichert ist und ".name" in einem char[29]?
-
Warum verwendest du nicht
string
? Dann funktioniert auch der Vergleich.
Bei deinem Code werden nur die Adressen der beiden Variablen verglichen - es entspricht:if (&mensch1.name[0] == &mensch2.name[0])
Du müßtest
strcmp
stattdessen verwenden.
-
@Th69 sagte in struct variablen mit einander vergleichen:
Warum verwendest du nicht
string
? Dann funktioniert auch der Vergleich.
Bei deinem Code werden nur die Adressen der beiden Variablen verglichen - es entspricht:if (&mensch1.name[0] == &mensch2.name[0])
Du müßtest
strcmp
stattdessen verwenden.Probiere ich nachher mal aus.
also strcmp statt dem char?
-
Nein,
string
stattchar[29]
!
-
-
@Lumberjack Es wäre sehr, sehr sinnvoll, wenn du auch weißt warum das funktioniert.
-
@DirkB sagte in struct variablen mit einander vergleichen:
@Lumberjack Es wäre sehr, sehr sinnvoll, wenn du auch weißt warum das funktioniert.
Ich habe es jetzt so verstanden, dass wenn ich einen Buchstaben habe, eher char nehme.
Bei einem Wort dann string. th69 hatte erklärt, was die Zeile Code tut.Bei einem string würde dann der Wert kontrolliert werden?
-
Der wesentliche Unterschied besteht dadrin, daß
string
eine Klasse ist (basierend auf basic_string), bei der u.a. der Operator == überladen ist, welcher den lexikographischen Vergleich durchführt.Bei einem (aus C übernommenen) Array gibt es diese Überladung nicht, so daß eben nur die Adressen verglichen werden und man dann stattdessen spezialisierte Funktionen (wie z.B. strcmp) verwenden muss.
-
@Th69 Besten Dank für die Erklärung.