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;
}
Zahlen Formatierung Problem
- Oskaar1994
- Geschlossen
- Erledigt
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
-
-
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;
} -
Ich benutze doch garkeine Schleife Und mir fällt gerade auf ich wollte die Zeile eigentlich so machen:
if(iNum >= 10 && iNum < 100){ -
Ich benutze doch garkeine Schleife Und mir fällt gerade auf ich wollte die Zeile eigentlich so machen:
if(iNum >= 10 && iNum < 100){
Ich sag immer Schleife weil das so ähnlich aufgebaut ist. Es ist eine Abfrage, zufrieden?
Das war mein einzigster Lösungsvorschlag. Jetzt müssen die Experten ran -
Hm leider funktioniert es immer noch nicht und der Server crasht nach ein paar Sekunden.
-
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.
-
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.
Also müsste ich dann vorher Valstr benutzen ? Und der Compiler hat nicht gemeckert.
-
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.
-
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;
} -
stock FMex (iIndex) {
new iNum[3];
valstr(iNum, iIndex);
new iLength = strlen(iNum) - 1;
new iText[3];
while (iLength) {
strcat(iText, "0");
iLength --;
}
strcat(iText, iNum);
return strval(iText);
}Versuch's so, so konvertiert er dir den Integer halt zum String, bearbeitet ihn und konvertiert ihn dir zum Integer zurück.
-
Bringt den Server leider wieder zum Abstürzen und da wird doch dann keine 0 eingefügt oder verstehe ich das falsch ?
-
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.
-
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.
-
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.
-
Ach, dass format das auch von vornherein kann, war mir nicht klar, dann gehts natürlich auch einfacher
-
Danke euch allen
-
breadfish.de
Hat das Thema geschlossen.