Dialog - Inputtext bedingt

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 Breadfish,
    ich möchte in einem ganz einfachen Dialog dem Spieler DIALOG_STLYE_INPUT anzeigen lassen.
    Ich möchte überprüfen ob die Eingabe eine Zahl ist, wenn Text oder was anderes außer Ziffern drinnstehen will ichs nicht akzeptieren lassen.
    Also weiß ich nciht wie das genau aussehen soll.



    Danke im Voraus


    MFG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Der Thread hat mir nicht sonderlich geholfen.

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Hallo


    Jetzt eventuel für eine solche Funktion zu gross, aber generell sehr wertvoll ist sscanf von Y_Less. Man kann damit Strings in Werte spliten, zB "Hallo,5,-78.971" in "Hallo", "5" und "-78.971". Kannst es dir ja mal im Englischen anschauen:


    http://forum.sa-mp.com/showthread.php?t=120356


    Von Madding ibts hier auch eine Erklärung:


    [ SCRIPTING ] sscanf 2.0


    Eben wie gesagt, für ein solch einfaches Checking zu überdimensioniert, früher oder später kommst Du aber an einen Punkt, wo solch ein Splitting oder Umformatieren von Werten unumgänglich ist.


    Gruss

  • Danke für deinen Post, aber wie du schon sagtest ist es für diese einfache Funktion zu überdimensioniert , also warum erklärst du nicht einfach die einfachere Methode, die mit simplen Methoden funktioniert ?

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Weil sscanf mehr oder weniger zum Standard gehört.
    Es gibt keine native Funktion die dir zu 100% sicherstellt,dass es sich bei der Eingabe um eine Zahl handelt.
    Du könntest "strval( inputtext ) " benutzen , allerdings funktioniert es für den Sonderfalls das inputtext = "0" ist nicht. Denn funktioniert strval nicht Fehlerfrei,gibt es als Rückgabewert 0.


    Eine extra Funktion wirst du sowieso brauchen,ob es nun sscanf ist oder zum Beispiel isNumeric:
    stock IsNumeric(const string[])
    {
    new lenght = strlen(string);
    for (new i=0; i<length; i++)
    {
    if (!((string[i] <= '9' && string[i] >= '0') || (i==0 && (string[i]=='-' || string[i]=='+'))))
    {
    return false;
    }
    }
    return 0;
    }
    Da würde ich definitiv eher sscanf benutzen.


    //Edit:
    Kannst es ja mal selber probieren:
    printf("strval(blaaa) %d",strval("blaa"));
    printf("strval(0) %d",strval("0"));

    Beides wird für %d die Zahl 0 einsetzen,obwohl "blaa" keine gültige Zahl ist.

    Einmal editiert, zuletzt von Goldkiller ()

  • Hallo,
    soweit so gut. Jedoch finde ich auch das sscanf Tut von Maddin nicht gerade gut erklärt. Woher soll ich wissen was die Funktion sscanf(); macht=
    Wieso schreibt er hinter den Text "s".. Da blicke ich eifnach nicht durch.
    Zu der Funktion... Diese Funktioniert leider nicht.

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Dann ist strfind immernoch eine total schlechte Lösung.Da müsstest ja für jeden Buchstaben 1x strfind benutzen,ist doch Quatsch.
    Da würde ich eher durch das Array gehen und prüfen ob :
    ...
    Schleife {
    if( 'a' <= array[index]<= 'z' || 'A' <=array[index] <= 'Z' )
    }
    ...