Variable mit Eingaben die aus Buchstaben bestehen vergleichen



  • Hallo,

    Ich beschäftige mich noch nicht sehr lange mit C++ also wollte ich wegen einer Sache mal nachfragen. Der Vergleich bei if oder switch mit Eingaben die aus Zahlen mit Variablen zu vergleichen funktioniert ohne Probleme.

    Bsp.:

    if (eingabe1==2)
    cout<<"Hallo";
    else cout<<"Tschuess";

    Wenn ich das nun mit Buchstaben bzw. Namen versuchen will funktioniert das nicht.

    Bsp.:

    if (eingabe1==a)
    cout<<"Hallo";
    else cout<<"Tschuess";

    Dort bekomme ich dann die Meldung:

    'a': nichtdeklarierter Bezeichner

    Klingt ja auch logisch, da "a" als Variable angesehen wird die keinen Wert bekommen hat.

    Wie kann ich das denn so ändern, das "a" nur als Buchstabe erkannt wird und vergleicht werden kann?

    Ich bedanke mich schon mal für die Antworten.

    mfg



  • Zeichenliterale werden mit Hochkommas eingeschlossen: 'a'



  • Ich habe es jetzt mal so versucht:

    #include <iostream>

    using namespace std;

    int main()

    {
    char eingabe1[10];

    cout<<"Bitte Buchstabe eingeben:";
    cin>>eingabe1;

    if (eingabe1=='b')
    cout<<"Geht";
    else cout<<"Geht nicht";

    cin.get();
    cin.get();
    return 0;

    }

    Wenn ich nun versuche zu starten bekomme ich folgende Fehlermeldungen:

    error C2446: '==': Keine Konvertierung von 'int' in 'char *'
    1> Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    error C2040: '==': 'char [10]' unterscheidet sich von 'int' in Bezug auf die Anzahl vorgenommener Dereferenzierungen



  • Nimm mal

    char eingabe1;
    


  • Ohne die "10" funktioniert es schonmal, danke. Wie ist das nun wenn ich das mit ganzen Wörtern machen will?



  • Gast23 schrieb:

    Wenn ich nun versuche zu starten bekomme ich folgende Fehlermeldungen:

    error C2446: '==': Keine Konvertierung von 'int' in 'char *'
    1> Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    error C2040: '==': 'char [10]' unterscheidet sich von 'int' in Bezug auf die Anzahl vorgenommener Dereferenzierungen

    eingabe ist ein Array vom Typ char[10].

    cin >> eingabe; schreit nach einem Buffer-Overflow. (Was passiert, wenn die Eingabe länger als 9 Zeichen ist? --> Chaos!

    'b' ein Literal vom Typ char.

    eingabe == 'b' führt dazu, dass aus der linken Seite ein Zeiger auf das erste Element wird -- Wenn man Arrays nur schräg anguckt, kommt ein Zeiger heraus -- die rechte Seite wird zu einem int "promoted". (siehe "integral promotion" im C++ Standard). Du vergleichst also ein char* mit einem int, was nicht geht.

    Du kannst stattdessen eingabe[0]=='a' schreiben. Damit würdest Du das erste Zeichen des Arrays mit 'a' vergleichen. Dieser Vergleich liefert aber auch den Wahrheitswert "true", falls die Eingabe "abc" ist, da das erste Zeichen immer noch ein 'a' ist.

    Alternativ nimmst Du einen std::string:

    string blup;
      cin >> blup;
      if (blup == "a") {
        ...
      } else {
        ...
      }
    

Log in to reply