[Frage/Problem] Enum

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,


    eigtl. wollte ich ein Tutorial schreiben, doch dabei fiel mir folgendes auf:




    enum x {
    a,
    Float:b = 3.4,
    c = 'A'
    }



    main()
    {


    printf("%f",_:b); // 3.4000000
    printf("%d",x); // 66 <----------- wieso kommt hier 66 raus, obwohl 3 richtig wäre?
    printf("%c",c); //A
    printf("%d",x:a); // 0






    Hier kommt 3 raus bei x:




    enum x {
    a,
    b,
    c }


    main()
    {
    printf("%d",x);
    }







    Noch etwas



    enum Farben {
    rot,
    grun,
    gelb,
    blau,
    lila }

    main()
    {
    printf("%d",Farben); // 5 aber trotzdem Tag Mismatch
    new Farben:Eins = rot;
    new Farben:Zwei = Farben:4.2000;
    printf("%d | %f",_:Eins,_:Zwei); // 0 (richtig) und 4.19 ?


    printf("%d",_:lila); // 4


    }


    Ich finde da einfach keine Regelmäßigkeit/Gesetzmäßigkeit, was wie was angibt :HILFE: ^^
    Bitte um rasche Antworten!



    Vielen Dank im Voraus


    MFG

  • Zu deinem obigen, ich weiß nicht welchem PWN Compiler du nützt, jedoch stürzt er bei mir ab, wenn ich unter Float dort was eingebe ^^ Also deine Sache mit der Zahl 66 hab ich beobachtet und eigentlich wiedergibt die Enumeration die Zahl der Größe vom ganzen enum z.B.:
    enum test
    {
    a[14],
    b[14],
    c,
    }
    dann ist bei test der Wert 29. Grund: 14+14+1=29.


    Unten zu deinem TagMismatch Zeile, musst du das Wort Farben in deinem enum und Co Kleinschreiben, da es aus irgendeinem Grund Falsch formatiert wird (?) Was ich ehrlich gesagt selbst nicht erklären kann... Lustigerweise hab ich probier ein einfachen Float zu definieren, sah folgendermaßen aus:
    new Float:test = 4.200000; //Die restlichen 5-Null, da ein Float normalerweise 6 Dezimalstellen hat
    und gab trotzdem unter printf den Wert 4.199999 aus xD Also ich hoffe ich konnte dir zu den anderen Problemen helfen, aber das mim Float ist lustigerweise auch bei mir ^^.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Danke erstmal Templer.


    Ich habe mir das ganze nochmal angesehen in einem C Buch (finde es in PAWN dennoch verwirrend und unklar im Moment; hoffe das klärt sich).




    Meine Frage ist nun:
    enum a (+= 1) { b ,c = 2,d }


    // Aufzählung "a"; alle Werte der Elemente immer Vorgänger + 1 (standard); c soll 2 sein


    main()
    {
    // Nun geht ja:
    printf("%d",c); // 2
    printf("%d",d); // 3
    // ... da dies ja auch nur Konstanten sind (obgleich ein Teil von a oder nicht)
    // Auch:
    new o = b; // 0

    //
    new a:p = c;
    new a:k = a:5; // Wenn ich mir sicher bin: 4 ist ein Teil bzw. kann einer sein vom Enum "a"
    // Dies ist normalerweise der Fall, da die Elemente nur "symbolisch" sind und Integerwerte sind
    new l = _:k; // andersherum

    printf("%d",a); // 4 - wieso? Bsp " enum jo { lol, jap, ok = 6 } " ergibt für jo auch 7,obgleich nur 3 genutzt werden können. Daher ergab es vorher auch 66, da
    // der ASCII Code von 'A' 65 ist. ;)
    printf("%d",l); // 5
    }
    // Bis her richtig?


    // Wie ist das aber nun mit Floatwerten, etc in einem enum (Ist ja eigenartig), da Enums
    // eigtl nur symbolisch sind (kein eigener Datentyp sondern konstate Integerwerte) ?


  • Ah gut, ich hab beispielsweise nicht daran gedacht das der ASCII Code verwendet wird, da ich bei der UTF Kodierung nachschaute .. :pinch: Denoch die Frage warum enum nicht die "richtigen" Werte ausgeben kann, wenn eine Definition einen Charakter enthält, da wenn ein Integer und ein, wie du Ihn nennst, symbolischer Charakter verwendet wird, eig dann 67 rauskommen sollte und nicht 66... ansonsten sollte alles stimmen.


    Nun, ein enum ist eine Struktur. Sogesehen eine Struktur für eine new Definition, damit mehrere Datentypen (String, Float, Integer, Boolean..) verwendet werden können und keine einzelnen Definitionen durchgeführt werden.


    //Edit: Es gibt auch mehrere Verwendungen vom enum, welche mir leider noch unbekannt sind..

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!