if Funktionen
-
Hallo liebe C++ Community !
Ich hätte da mal eine Frage bezüglich der "IF" Funktionen.
Ich habe ein Edit-Feld, und ich möchte;
WENN (Z3+Voc1==2 sind UND edtAusgabe->Text=="Guten Tag!)"
GLEICH edtAusgabe->Color=clGreen;ORDER WENN (Z3+Voc1==2)
GLEICH edtAusgabe->Color=clRedWürde doch sogesehen so in vereinfachter rm so aussehen
if (x+y==z & Text=="Hallo") Color=clGreen; else if (x+y+z==z) Color=clRed;
Mein Code:
if (Z3 + Voc1 == 2 & edtAusgabe->Text=="Guten Tag!","Guten Morgen!","Guten Tag", "Guten Morgen") edtAusgabe->Color=clGreen; else if (Z3 + Voc1 == 2) edtAusgabe->Color=clRed;
Mein Problem:
Der Text wird Grün, auch wenn NICHTS in dem Edit-Feld geschrieben steht.Danke schonmal im vorraus für eure Hilfe.
Gruß Alex
-
es gibt 2 Varianten zur Lösung:
1. schreib die if-Abfrage komplett, also z.B.:
if (Z3 + Voc1 == 2 && ( edtAusgabe->Text=="Guten Tag!" || edtAusgabe->Text=="Guten Morgen!" || edtAusgabe->Text=="Guten Tag" || edtAusgabe->Text=="Guten Morgen") ) edtAusgabe->Color=clGreen; ...
2. Schreib alle Möglichkeiten in einen TStringList und prüfe dann mit IndexOf ob der Wert enthalten ist:
TStringList *List = new TStringList(); List->Add("Guten Tag!"); List->Add("Guten Morgen!"); //usw. if (Z3 + Voc1 == 2 && List->IndexOf(edtAusgabe->Text) >= 0 ) edtAusgabe->Color=clGreen; //.. delete List;
Hinweis: statt new/delete kann man besser std::auto_ptr verwenden, hab ich jetzt aber nicht :p
und natürlich geht statt ner TStringList auch ein std::vector oder ähnliches mit find-Funktionen
-
Hallo blackanges,
verwende statt dem binären Und '&' das logische Und '&&':
if (x+y==z && Text=="Hallo") Color=clGreen; else if (x+y+z==z) Color=clRed;
Und dein 2. Fehler ist, daß du die Abfrage auf verschiedene Texte nicht einfach mit dem Komma ',' durchführen kannst (dieser hat hier eine ganz andere Bedeutung) - du mußt jeweils die Ausdrücke mit dem logischen Oder '||' verknüpfen:
if (Z3 + Voc1 == 2 && (edtAusgabe->Text=="Guten Tag!" || edtAusgabe->Text =="Guten Morgen!" || edtAusgabe->Text=="Guten Tag" || edtAusgabe->Text=="Guten Morgen")) edtAusgabe->Color=clGreen; else if (Z3 + Voc1 == 2) edtAusgabe->Color=clRed;
(beachte auch die Klammern um die Oder-Verknüpfungen, da '&&' eine höhere Priorität als '||' hat).
Besser wäre jedoch die Auslagerung der Abfrage in eine eigene Funktion sowie die Verwendung eines Arrays und einer Schleife.
P.S. "if" ist keine Funktion, sondern eine Anweisung (statement).
-