[Ajuda] Como verificar se o digitado estб da maneira pedida
#1

Bom , queria saber como faзo , exemplo , eu mando uma dialog com input pro jogador
ai quero que ele digite sua data de nascimento da seguinte maneira DD/MM/AAAA , como eu faria ?
sei que tenho que usar uma boa parte da include string....Nem consegui pensar numa maneira ,
nгo й um pedido isto , quero ajudar como faz , nгo manda cуdigo sem explicaзгo que nгo vou aceitar !
Reply
#2

Nгo entendi a sua pergunta, se vocк quer que ele digite DD/MM/AAAA, й sу mandar ele digitar...

O que exatamente vocк quer ?
Reply
#3

tipo algo que verifique a inputtext , se ele digitou no formato "dia/mes/ano" entendes ?
Reply
#4

Nгo й querendo tirar a graзa, que nem vocк disse que nгo queria o cуdigo pronto...
Mas nesse cуdigo aqui vocк iria se quebrar um pouco pra fazer, ou entгo ele iria ficar muito (nгo funcional) ahuehuae, com todo respeito.

Eu fiz um aqui simples, rapidinho.

Code:
pawn Код:
stock isNumber(n[])
{
    for (new i = 0; n[i]; ++i) if (n[i] > '9' || n[i] < '0') return 0;
    return 1;
}
stock readFormat(reader[])
{
    if (reader[0] == '\0' || strfind(reader, "/") == -1) return false;

    new
        sS = 0,
        sNextVal[15],
        sOldVal[15];
       
    format(sOldVal, 15, "%s/", reader);
   
    do
    {
        if ((sS = strfind(sOldVal, "/")) != -1)
        {
            strmid(sNextVal, sOldVal, 0, sS);
            strmid(sOldVal, sOldVal, sS + 1, strlen(sOldVal));
            if (!isNumber(sNextVal)) return 0;
        }
    } while(sS > 0);
    return 1;
}
O que ele faz ? ele verifica se a string estб nulla, se tiver nulla retorna false.
Verifica se existe '/' nela, se nгo existir retorna null.
Verifica se os valores que estгo entre as barras: 10/10/1000, sгo nъmeros...
Se nгo forem nъmeros retorna FALSE tambйm.

Й basicamente oque vocк queria, mas ainda tem umas formas de burlar isso, ainda mais pra usuбrios.
Que sгo a praga de qualquer programador em relaзгo a achar bugs no seu code.
Reply
#5

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Nгo й querendo tirar a graзa, que nem vocк disse que nгo queria o cуdigo pronto...
Mas nesse cуdigo aqui vocк iria se quebrar um pouco pra fazer, ou entгo ele iria ficar muito (nгo funcional) ahuehuae, com todo respeito.

Eu fiz um aqui simples, rapidinho.

Code:
pawn Код:
stock isNumber(n[])
{
    for (new i = 0; n[i]; ++i) if (n[i] > '9' || n[i] < '0') return 0;
    return 1;
}
stock readFormat(reader[])
{
    if (reader[0] == '\0' || strfind(reader, "/") == -1) return false;

    new
        sS = 0,
        sNextVal[15],
        sOldVal[15];
       
    format(sOldVal, 15, "%s/", reader);
   
    do
    {
        if ((sS = strfind(sOldVal, "/")) != -1)
        {
            strmid(sNextVal, sOldVal, 0, sS);
            strmid(sOldVal, sOldVal, sS + 1, strlen(sOldVal));
            if (!isNumber(sNextVal)) return 0;
        }
    } while(sS > 0);
    return 1;
}
O que ele faz ? ele verifica se a string estб nulla, se tiver nulla retorna false.
Verifica se existe '/' nela, se nгo existir retorna null.
Verifica se os valores que estгo entre as barras: 10/10/1000, sгo nъmeros...
Se nгo forem nъmeros retorna FALSE tambйm.

Й basicamente oque vocк queria, mas ainda tem umas formas de burlar isso, ainda mais pra usuбrios.
Que sгo a praga de qualquer programador em relaзгo a achar bugs no seu code.
Nгo tem necessidade de criar uma funзгo para checar se a string й um nъmero, o prуprio SA-MP nos proporciona uma.


pawn Код:
new var[] = "aa";

if (!strval(var)) printf("Nгo й nъmero!");
if (strval(var)) printf("Й nъmero!");
Reply
#6

@iCastiel, nгo tinha prestado atenзгo nisso, pensava que essa funзгo retornava inteiro apenas, como:
A = 65, valeu pela ideia.

pawn Код:
stock readFormat(reader[])
{
    if (reader[0] == '\0' || strfind(reader, "/") == -1) return false;

    new
        sS = 0,
        sNextVal[15],
        sOldVal[15],
        sBarFind = 0,
        sV = 2;
       
    format(sOldVal, 15, "%s/", reader);
   
    do
    {
        if ((sS = strfind(sOldVal, "/")) != -1)
        {
            sBarFind ++;
            if (sBarFind == 3) sV = 4;
            strmid(sNextVal, sOldVal, 0, sS);
            strmid(sOldVal, sOldVal, sS + 1, strlen(sOldVal));
            if (!strval(sNextVal) || strlen(sNextVal) != sV) return 0;
        }
    } while(sS > 0);
    return sBarFind == 3;
}
@TOPIC

eu dei uma trabalhada melhor no code, agora talvez seja mais difнcil de burlar.

Код:
04/04/0004 = true
0/04/0 = false
04/04/04 = false
0404040 = false
04/0404 = false
amlsdaks = false
DD/MM/AAAA = false
2m/2m/20md = false
/0/203/2 = false
0004/04/04 = false
Reply
#7

Poderia me ensinar como usar estб "funзгo" ? kkkk Nгo entendi muita coisa nela
Reply
#8

Tб me zoando nй ?

pawn Код:
public OnDialogResponse(playerid, dialogid, responde, listitem, inputtext[])
{
    if (dialogid == x)
    {
        if (readFormat(inputtext)) printf("Informou data correta.");
        else printf("Data incorreta, informe novamente.");
    }
}
Й sу isso cara, ela verifica se o cara digitou uma data corretamente no formato padrгo.
Reply
#9

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Tб me zoando nй ?

pawn Код:
public OnDialogResponse(playerid, dialogid, responde, listitem, inputtext[])
{
    if (dialogid == x)
    {
        if (readFormat(inputtext)) printf("Informou data correta.");
        else printf("Data incorreta, informe novamente.");
    }
}
Й sу isso cara, ela verifica se o cara digitou uma data corretamente no formato padrгo.
Entгo Wilian, e no caso se a dialog fosse uma pergunta.

Exemplo:

Qual й o estado de Sгo paulo ?
Ele digita no inputtext: Rio de janeiro..

No caso a resposta certa teria de ser: " Sгo paulo ".
Tem como ?
Reply
#10

Oque eu fiz foi tipo uma mask pra data, isso ai que vocк tб dizendo qualquer tipo de verificaзгo barata faz...

pawn Код:
public OnDialogResponse(playerid, dialogid, responde, listitem, inputtext[])
{
    if (dialogid == x)
    {
        if (response)
        {
            if (!strcmp(inputtext, "Sгo Paulo")) printf("Correto");
            else printf("Errado, resposta correta: Sгo Paulo");
        }
    }
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)