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=clRed

    Wü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).



  • Klappt alles wunderbar 🙂
    Dankeschön @Linnea & @Th69 !

    Gruß Alex


Anmelden zum Antworten