Zahlen Formatierung Problem

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
  • Hey,
    habe ein kleines Problem. Ich habe mir eine Funktion erstellt die Zahlen unter 100 mit einer bzw. zwei Nullen versehen soll. Also z.B. 9 ---> 009 || 27 ---> 027. Das ganze klappt leider nicht und bringt den Server nach ein paar Sekunden zum crashen. Was mache ich falsch ?
    stock FMEx(iNum)
    {
    new szStr[3];
    format(szStr,sizeof(szStr),"%d",iNum);
    if(iNum < 10){
    strins(szStr,"00",0);
    }
    if(iNum >= 100 && iNum < 100){
    strins(szStr,"0",0);
    }
    return szStr;
    }

  • In der zweiten If Schleife steht dass die Zahl größer und kleiner als Hundert sein soll. Ein Zustand der nie gegeben ist.


    if(iNum >= 100 && iNum < 100){


    Die erste Abfrage rausnehmen, du willst ja nur Zahlen unter Hundert ändern sagtest du.


    if(iNum < 100){



    Edit: hab deinen Fehler erkannt. Null zu viel.
    if(iNum >=10 && iNum < 100){

  • stock FMEx(iNum){
    if(iNum < 10)return strins(iNum,"00",0);
    else if(iNum >= 10 || iNum < 100)return strins(iNum,"0",0);
    return 1;
    }


    Oskaar1994:

  • iNum ist bei dir ein Integer, strins benötigt einen String. Eigentlich sollte sogar der Compiler dir schon sagen, dass das nicht funktionieren kann, solange iNum ein Integer ist.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Du kannst entweder vorher Valstr benutzen, oder das ganze direkt als String durchformatieren.
    stock FMex (iNum[]) {
    new iLength = strlen(iNum) - 1;
    new iText[3];
    while (iLength) {
    strcat(iText, "0");
    iLength --;
    }
    strcat(iText, iNum);
    return iText;
    }


    Im Editor geschrieben und ungetestet. Würde dir deine Zahl halt als String ausgeben und benötigt auch einen String als Input.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Also mit valstr dreht jetzt alles durch. Und deine Methode kann ich auch nicht benutzen, da ich davor noch mit der Zahl rechnen muss. So verwende ich es:
    GetVehicleZAngle(aveh, angleZ);
    format(angleFormat, sizeof (angleFormat),"~w~[%s] [%s] [%s] [%s] ~w~[%s] [%s] [%s]",FMEx(floatround(angleZ)-3),FMEx(floatround(angleZ)-2),FMEx(floatround(angleZ)-1),FMEx(floatround(angleZ)),FMEx(floatround(angleZ)+1),FMEx(floatround(angleZ)+2),FMEx(floatround(angleZ)+3));
    PlayerTextDrawSetString(playerid,HeadingTD[playerid],angleFormat);
    stock FMEx(iNum)
    {
    new convertedInt[3];
    new convertedInt1[3];
    valstr(convertedInt,0);
    valstr(convertedInt1,00);
    new szStr[3];
    format(szStr,sizeof(szStr),"%d",iNum);
    if(iNum < 10){
    strins(szStr,convertedInt1,0);
    }
    if(iNum >= 10 && iNum < 100){
    strins(szStr,convertedInt,0);
    }
    return szStr;
    }


  • Versuch's so, so konvertiert er dir den Integer halt zum String, bearbeitet ihn und konvertiert ihn dir zum Integer zurück.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Mach es einfach so:


    stock FMEx(iNum)
    {
    new szStr[4]; //000 + Null Char
    format(szStr,sizeof(szStr),"%03d",iNum);
    return szStr;
    }


    Der String brauch 4 Cells 3 für die Zahl und einen für den Null-Char ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • stock FMex (iIndex) {
    new iNum[3];
    valstr(iNum, iIndex);
    new iLength = 3 - strlen(iNum);
    new iText[4];
    if (iLength == 2) format(iText, sizeof(iText), "00%d", iIndex);
    else if (iLength == 1) format(iText, sizeof(iText), "0%d", iIndex);
    strcat(iText, iNum);
    return strval(iText);
    }


    Getestet und geprüft. Funktioniert einwandfrei.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • return strval(iText);


    Das bewirkt, dass wenn er z.B. 099 hat, die 0 vorne verschwindet und ich dachte er will sie haben.


    Schau dir mein Beispiel an, das ist die simpelste Methode dafür, format hat diese Funktion mit den nullen schon ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ach, dass format das auch von vornherein kann, war mir nicht klar, dann gehts natürlich auch einfacher :D


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'