sizeof großes 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
  • Hallöchen Brotfisch,


    ich habe mal ein Problem, was ich bisher nie verstanden habe.
    Weiß einer, warum das so ist?


    enum ProblemEnum
    {
    ProblemID,
    ProblemText[255]
    }
    new Problem[10][ProblemEnum];


    stock Funktion(problementry)
    {
    new count;
    for(new x; x < sizeof Problem[problementry][ProblemText]; x++)
    count++;
    return count;
    }


    Der hat bei dem "for" ein Problem. (Zeile 11)


    Ich weiß nicht warum oder wieso....
    Das Problem habe ich des öfteren.
    Ich hatte es bisher nur durch #define ProblemTextL 255 und dann "ProblemText[ProblemTextL]" gefixt.
    So könnte ich dann bei der for Schleife einfach ein for < ProblemTextL nehmen.


    Weiß nicht, wieso und warum das so ist :thumbdown:


    Weiß einer von euch, wieso das so ist?
    Ich freue mich einfach auf ne logische Erklärung :thumbup:


    edit 1: Sizeof und Strlen gehen beides nicht, in der for :!:

    Miete mich (nicht) :love:

  • Was genau wird das?
    Ich versteh den sinn dahinter nicht :D


    @Pille_
    Wenn nur einen Anweisung kommt sind die Klammern egal ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski



  • Haargenau das gleiche....


    Klammern sind bei If, schleifen usw nicht wichtig.
    @ black: geht sogar mit mehreren anweisungen ;)

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Zitat

    @ black: geht sogar mit mehreren anweisungen ;)


    Eigentlich nicht, aber egal^^
    kannst ja gerne mal ein return in die Abfrage setzen -> unreachable code


    Außerdem ist
    print("blubb"),print("furz");
    auch nur eine Anweisung ;)


    Bubelbub
    Es wäre hilfreich wenn du uns sagen würdest was du vor hast

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • for(new x=0; x < Problem[problementry][ProblemText]; x++)
    {
    count++;
    }


    Jetzt würde mich nur noch der Grund interessieren?
    Ich meine man gibt doch da keine Value an?


    Danke trotzdem dafür ^^
    Kann ich mir mein #define sparen :thumbup:
    Vorausgesetzt das funktioniert dann auch wirklich, am ende nimmt der immer "1" oder so :D


    Zitat

    Bubelbub


    Es wäre hilfreich wenn du uns sagen würdest was du vor hast


    Ja ging einfach um eine Auto Funktion.
    Ich wollte meine Sa-MP Karierre schon immer wissen wieso das so ist.
    Und jetzt liegt es am "sizeof" :D
    Einfach weglassen und gut ist... so einfach :rolleyes:

    Miete mich (nicht) :love:

  • Das wird nicht funktionieren,
    das es den Wertzurück geben würde der drin steht,
    z.B. es steht ein A drin, raus kommt 65.


    Kannst du gerne ausprobieren,
    aber es ist bestimmt nicht das was du willst ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • for(new x; x < sizeof(ProblemEnum:ProblemText); x++)


    Probiers.


    Ich könnte das nachvoll ziehen, bei mir gibt das aber errors :D
    von wegen invalid symbol name

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Universale Lösung:


    #define PROBLEMTEXT_LEN 255


    enum ProblemEnum
    {
    ProblemID,
    ProblemText[PROBLEMTEXT_LEN ]
    }
    new Problem[10][ProblemEnum];


    stock Funktion(problementry)
    {
    new count;
    for(new x; x < PROBLEMTEXT_LEN; x++)
    count++;
    return count;
    }

  • for(new x; x < strlen(Problem[problementry][ProblemText]); x++)


    Denn laut den enum handelt es sich ja um einen string und sizeof würde nur die größe des Arrays zurückgeben, geht hier allerdings nicht da wir ein Multidimensionales haben.

    Ich muss glaube ich echt auf meine #define´s zurückgreifen, wie Nortex es sagte.... :|



    #include <a_samp>


    enum ProblemEnum
    {
    ProblemID,
    ProblemText[255]
    }
    new Problem[10][ProblemEnum];


    public OnGameModeInit()
    {
    new count;
    for(new x; x < strlen(Problem[random(sizeof(Problem))][ProblemText]); x++)
    count++;
    printf("Ergebnis: %i von 254 Durchläufen.", count);
    return 1;
    }

    Code
    [19:30:30] Ergebnis: 0 von 254 Durchläufen.

    Miete mich (nicht) :love:

  • Ja weil nichts drin steht, ist doch logisch :D


    Okay, so macht er "4" Durchläufe.
    #include <a_samp>


    enum ProblemEnum
    {
    ProblemID,
    ProblemText[255]
    }
    new Problem[10][ProblemEnum];


    public OnGameModeInit()
    {
    new count;
    format(Problem[1][ProblemText], 255, "Test");
    for(new x; x < strlen(Problem[1][ProblemText]); x++)
    count++;
    printf("Ergebnis: %i von 254 Durchläufen.", count);
    return 1;
    }


    Code
    [19:35:34] Ergebnis: 4 von 254 Durchläufen.


    Nur muss ich dann beim Format den String erstmal definieren.
    Ich glaube die Größe ist in dem Sinne gar nicht fest?


    Ich guck mal was beim Int-String passiert.



    ===============================================
    edit:
    ===============================================


    #include <a_samp>


    enum ProblemEnum
    {
    ProblemID,
    ProblemText[255]
    }
    new Problem[10][ProblemEnum];


    public OnGameModeInit()
    {
    for(new i; i < 255; i++)
    Problem[1][ProblemText][i] = random(999);


    new count;
    for(new x; x < strlen(Problem[1][ProblemText]); x++)
    count++;
    printf("Ergebnis: %i von 255 Durchläufen.", count);
    return 1;
    }



    Danke an alle.
    Jetzt geht´s :thumbup:

    Miete mich (nicht) :love:

  • Gibt da auch einen Trick um es ausrechnen zu lassen. Einfache Mathemtik und bischen Verständnis für das Schlüsselwort "enum" brauch man dafür aber schon :p.
    Bin mir nicht mehr ganz sicher wie es ging,die hat die "größe" direkt erfasst. Es funktioniert aber auch Problemlos so:


    #include <a_samp>


    enum ProblemEnum
    {
    ProblemID,
    NochMehr[5],
    ProblemText[255],
    dummy // ohne den dummy wäre ProblemText nicht rechenbar

    }
    main() {
    printf("size ProblemText %d ", _:dummy - _:ProblemText ); // für größe von ProblemText
    printf("size NochMehr %d ", _:ProblemText - _:NochMehr ); // für größe von NochMehr
    printf("size ProblemID %d ", _:NochMehr - _:ProblemID ); // für größe von ProblemID
    }
    Wieso das funktioniert ? Hinter ProblemID,NochMehr,ProblemText und dummy stecken nur Zahlen.
    Es funktioniert auch ohne dummy, müsste man dann aber etwas schreiben .

  • Es funktioniert auch ohne dummy, müsste man dann aber etwas schreiben .


    müsste das dann nicht auch so funktonieren:


    printf("size ProblemText %d ",sizeof(Problem[]) - _:ProblemText);
    Also errors / arnings gibts keine^^

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • sizeof brauch man dafür gar nicht.
    printf("size ProblemText %d ", _:ProblemEnum - _:ProblemText);
    Das gilt dann aber auch nur für den letzten Eintrag ( ProblemText ) des enum's ProblemEnum .


    Das ist ja heiß.


    Wieso weiß ich nichts von der Bedeutung von "_:Variable"???
    xD


    Liegt wahrscheinlich an meiner Früheren "Learning by Doing" Geschichte.


    Danke trotzdem :thumbup:


    Offtopic: Veröffentlichst du mir vielleicht die Funktion von dem offiziellen Sa-MP Server, wo abgefragt wird ob man im Wasser ist? Weil Z => 0 abfragen bringt es ja nicht :(

    Miete mich (nicht) :love:

  • _: entfernt nur das Tag.
    Beispiel:
    new Text:tdTextdraw;
    tdTextdraw = CreateTextDraw(...);
    if( _: tdTextdraw == 1000 ) // gibt kein tag mismatch
    // if ( tdTextdraw == 1000 ) // gibt ein tag mismatch
    enum ProblemEnum
    {
    ProblemID,
    NochMehr[5],
    ProblemText[255]
    }
    ProblemID,NochMehr und ProblemText haben hier nämlich das Tag ProblemEnum, also:
    new ProblemEnum:var = ProblemEnum:ProblemID; // macht kaum Sinn,funktioniert aber


    Zum Anderen,
    GetAnimationName(index, animlib[], len1, animname[], len2)
    prüfen ob animlib "SWIN" heisst.