Enum Problem.



  • Wie kann ich mit Enum machen, das wenn die Zahl kleiner als 5 ist das er sagt Zu-Klein und wenn sie größer ist Zu-Gross. Ich hab das enum schon geschrieben, aber ich weiß nicht wie ich es einsetzen soll.

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    enum FehlerMeldung {Zu-Gross, Zu-Klein};
    
    int Zahl;
    
    int main()
    {
        cout << "Gebe eine Zahl ein: " << endl;
        cin >> Zahl;
        if (Zahl==5)
        {
                    cout << "Du hast es eratten" << endl;
        }
    }
    

    Danke im Voraus.
    Gruß, Siegfried75 :).



  • Enumerationen dienen in C++ nur der Vergabe von Code-Namen, dahinter steckt ein einfacher Integer. Eine Ausgabe des Strings ist nicht möglich, da er im compilierten Programm gar nicht mehr existiert.

    MfG SideWinder



  • Gute und Schnelle Antwort 😃 hoffe er hört auf dich



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Aha Ich kapier das mit Enum nicht ganz.
    Aber mit Farben oder Wochentagen müsste das ja gehen das er ein Aufzählungs Typ ist Könnte das Jemand mit Wochentagen machen?

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    enum Tage {Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sontag};
    
    Tage Tag;
    
    int main()
    {
    }
    




  • Nur programmintern, z.B.:

    enum Country { AUSTRIA, GERMANY, ... };
    
    class User
    {
        Country country;
    public:
        ...
        Country getCountry() const { return country; }
    };
    
    ...
    
    User user = loadUserFromDatabase();
    if(user.getCountry() == AUSTRIA)
        cout << "Wollen Sie Schilling in Euro umrechnen?" << endl;
    else if(user.getCountry() == GERMANY)
        cout << "Wollen Sie D-Mark in Euro umrechnen?" << endl;
    
    // NICHT MÖGLICH:
    cout << user.getCountry() << endl;
    // dafür würde man ein array anlegen:
    static const char** COUNTRIES = { "Austria", "Germany", ... };
    cout << COUNTRIES[user.getCountry()] << endl; // ja, hinter dem enum steckt ein int, also können wir den als index für das array einsetzen
    

    MfG SideWinder



  • Ich hätte gerne ein Beispiel ohne Klasse.
    Nehmen wir mal das.

    enum Fehler {
    Ist-keine-Zahl,
    Ist-keine-Possitive Zahl,
    Ist-grosser-als-Hundert};



  • Zum Teufel, was willst Du? Enum sind nix anderes als eindeutige Symbole. Intern werden sie laut Standard auf int abgebildet. Was soll man noch mehr zu enums sagen? Vielleicht noch, dass du die Wertevergabe beeinflussen kannst:

    enum foo { eins = 1, zwei, drei, zehn = 10, elf, zwoelf };
    

    greetz, Swordfish



  • kannst genausogut "0" "1" "2" schreiben, nur dann ist es ein int, und somit bissl typenunsicher, und dann ist der code auch nicht so schön zu lesen. Aber n unterscheid gibts da eigentlich nich...



  • Ah ok jetzt hab ichs verstanden, ein enum ist fast das gleiche wie ein int.
    Warum geht dann aber das hier nicht?

    //Enum Beispiel
    
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    enum Tage {Montag=1, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sontag}; //Hierwird das enum defeniert.
    
    Tage Tag;
    
    int main()
    {
        for (Tag=1; Tag<7; Tag++)
        {
            cout << "Heute ist " << Tag << endl;
        }
        system("PAUSE");
    }
    

  • Mod

    Siegfried75 schrieb:

    Ah ok jetzt hab ichs verstanden, ein enum ist fast das gleiche wie ein int.
    Warum geht dann aber das hier nicht?

    Weil ein enum eben kein int ist, sondern nur implizit in ein solches konvertiert werden kann.
    [OT][rant]Und irgendwann begreift auch der Letzte, dass das nicht dazu führt, dass beide äquivalent sind. *cough*array==pointer*cough*[/rant][/OT]
    Ein enum hat keinen Inkrementoperator per se, du kannst ihn allerdings überladen

    Tage& operator++(Tage& Tag) { Tag = Tage( Tag % 7 + 1 ); return Tag; }
    //...
        Tag=Montag;
        do
        {
            cout << "Heute ist " << Tag << endl;
            ++Tag;
        }
        while ( Tag != Montag );
    

    oder du machst das ganze explizit in der for-Schleife, was dann nicht mehr so schön aussieht.



  • oder du kannst es manchmal beispielsweise in einen unsigned int und zurück (beinahe bedenkenlos) casten, solange das enum durchgehend von 0 bis n durchnumerriert ist...


Anmelden zum Antworten