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.
-
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 abertoupper()
odertolower()
nehmen, dann brauchst du nur 5 Vergleiche.Mit einem
switch
wird das auch lesbar.
-
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.