Ist das Dangling else ?
-
Hi Leute,

ich hab hier n Code geschrieben der mir einfach 2 Wörter vergleicht.
Gebe ich 2 gleiche Wörter ein kommt es zur korrekten Ausgabe, bei zwei falschen wird die else Klausel einfach übersprungen!
Handelt es sich hier um ein "Dangling Else" Problem und wenn ja wie mach ichs richtig ?

Hier mal der Code#include <iostream.h> void main() { char wort1[20]; char wort2[20]; int i; cout << "Wort 1 eingeben: "; cin >> wort1; cout << "Wort 2 eingeben: "; cin >> wort2; for (i = 0; (wort1[i] == wort2[i]) && (wort1 != 0); i++) { if(wort1[i] == wort2[i]) { cout << "Die beiden Woerter sind gleich !!!" << endl << endl; break; } else { cout << "Die beiden Woerter sind nicht gleich !!!" << endl << endl; } } }Danke schon mal im Vorraus

SE
-
EDIT : müll geschrieben
aber das prob liegt in deiner "for schleife"
-
Ja wiss ich steff3, es wird daher nur der 1. Buchstaben verglichen, aber bei 2 verschiedenen Wörtern überspringt der Code das else total ?!?!?!
mfg
SE
-
bei 2 versch. wörtern verhindert die schleifenbedingung den ersten durchlauf und somit das else
-
An dieser Stelle der Hinweis auf die str...()-Familie: strcmp, strcpy und strcat, sowie ihre "n-Zeichen"-Varianten.

-
nicht zu vergessen, der hinweis auf std::string

aber als übung kann man's ruhig mal selber machen
-
hmmmmmmmmmmmmm.....
aber wie sieht dann der funktionierende Code aus ?SE
-
Ist zwar nicht die beste Lösung, aber z.B. so könntest du es machen.
#include <iostream> using namespace std; int main() { char wort1[20]; char wort2[20]; int i; bool gleich; cout << "Wort 1 eingeben: "; cin >> wort1; cout << "Wort 2 eingeben: "; cin >> wort2; for (i = 0; i<20; i++) { if(wort1[i] == wort2[i]) { gleich = true; } else { gleich = false; break; } } if(gleich == true) { cout << "Die beiden Woerter sind gleich !!!" << endl << endl; } else { cout << "Die beiden Woerter sind nicht gleich !!!" << endl << endl; } }
-
kompakter geht es so:
#include <iostream> using namespace std; int main() { char wort1[20]; char wort2[20]; bool istGleich = true; int i; cout << "Wort 1 eingeben: "; cin >> wort1; cout << "Wort 2 eingeben: "; cin >> wort2; for (i = 0; (wort1[i] != 0) && (wort2[i] != 0); ++i) if((wort1[i] != wort2[i]) || (wort1[i+1] ^ wort2[i+1])) { istGleich = false; break; } cout << (istGleich ? "Die beiden Woerter sind gleich !!!" : "Die beiden Woerter sind nicht gleich !!!") << endl << endl; }und mit std::string:
#include <iostream> #include <string> using namespace std; int main() { string wort1, wort2; cout << "Wort 1 eingeben: "; cin >> wort1; cout << "Wort 2 eingeben: "; cin >> wort2; cout << (wort1 == wort2 ? "Die beiden Woerter sind gleich !!!" : "Die beiden Woerter sind nicht gleich !!!") << endl << endl; }
-
D**A**N**K**E**, suuuper EEK !!!

mfg
SE
-
D**A**N**K**E**, suuuper winheis !!!

mfg
SE