if elset nicht



  • Hallo,

    ich habe mal wieder ein kleines Problemchen.
    Die If- Anweisung macht nicht was sie soll.

    #include <iostream>
    using namespace std;
    
    int main() {
        char eingabe;
        cout << "Gib ein Alphazeichen ein\n";
        cin >> eingabe;
    
        if (isdigit(eingabe)){
           cout << "Kein Alphazeichen, Programm beendet." << endl;
                    // schließt Zahl aus
                    }
        else {
          if(eingabe == 'a' || 'e'|| 'i' || 'o'|| 'u'|| 'A'|| 'E'|| 'I'|| 'O'|| 'U'){
            cout << eingabe << " ist ein Vokal" << endl;
          }// soll Vokale auswählen
    
          else{
            if (eingabe != 'a' || 'e'|| 'i' || 'o'|| 'u'|| 'A'|| 'E'|| 'I'|| 'O'|| 'U')
                cout<< eingabe << " ist ein Konsonant"<< endl;
                // soll auf Konsonanten prüfen
            else
                cout << "Kein Alphazeichen, Programm beendet." << endl;
                // alles weitere Sonderzeichen etc .
    
     }
    
     }
        return 0;
    }
    

    Ich komm nicht drauf was der Fehler ist. Klammern?



  • @Lou-Cyphr3
    if (eingabe != 'a' || 'e'|| 'i' || 'o'|| 'u'|| 'A'|| 'E'|| 'I'|| 'O'|| 'U') ist dasselbe wie
    if ((eingabe != 'a') || 'e'|| 'i' || 'o'|| 'u'|| 'A'|| 'E'|| 'I'|| 'O'|| 'U')

    Da die Zeichenliterale ('e' usw.) alle einen Wert ungleich 0 haben, gelten sie als wahr.

    Schau dir die Wahrheitstabelle für || oder.

    Wo in deinen Unterlagen hast du diesen Syntax gesehen?



  • s.a. Kurzschreibweise If mit mehren Bedingungen

    PS: Deine "if-else if-else"-Verzweigung paßt aber auch logisch nicht.



  • @DirkB

    Was genau stimmt mit dem Syntax nicht?
    oder geht es genau um diesen Fall?
    if (eingabe != 'a' || 'e'|| 'i' || 'o'|| 'u'|| 'A'|| 'E'|| 'I'|| 'O'|| 'U')

    anderfalls müsste ich ja für jeden Vokal einzeln prüfen.

    @Th69
    Die Logik der Reihenfolge ist hier so daneben, weil es beim durchprobieren alles etwas durcheinander gekommen ist oder meintest du etwas anderes?



  • @Lou-Cyphr3 sagte in if elset nicht:

    if (eingabe != 'a' || 'e'|| 'i' || 'o'|| 'u'|| 'A'|| 'E'|| 'I'|| 'O'|| 'U')

    Weil das überprüft, ob die Eingabe ungleich a ist oder ob 'e' wahr ist oder ob 'i' wahr ist oder ... Und das ist immer wahr. Die Buchstaben hinter dem 'a' haben keinen Bezug mehr zu eingabe.

    anderfalls müsste ich ja für jeden Vokal einzeln prüfen.

    Ja, musst du. Oder ein set<char> verwenden und mit set.count nachschauen, ob der Buchstabe drin ist.



  • @Lou-Cyphr3 sagte in if elset nicht:

    anderfalls müsste ich ja für jeden Vokal einzeln prüfen.

    Ja.
    Du kannst aber toupper() oder tolower() nehmen, dann brauchst du nur 5 Vergleiche.

    Mit einem switch wird das auch lesbar.



  • @DirkB

    Okay danke.

    wie kann ich denn mit einem switch alle nicht Alphazeichen ausschließen?
    Ich hab für default schon die Konsonantenprüfung genommen.



  • @Lou-Cyphr3 sagte in if elset nicht:

    wie kann ich denn mit einem switch alle nicht Alphazeichen ausschließen?

    DirkB meinte das Testen auf Vokale mittels switch.
    Für Alphazeichen kannst du das war auch machen, aber da ist ein einzelner Funktionsaufruf + if viel sinnvoller.



  • @out

    macht Sinn ja.

    Danke sehr.


Anmelden zum Antworten