Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

isdigit za negativne brojeve

[es] :: C/C++ programiranje :: isdigit za negativne brojeve

[ Pregleda: 2194 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

marko_81
Marko Acović

Član broj: 97248
Poruke: 133
93.86.131.*



+1 Profil

icon isdigit za negativne brojeve11.05.2009. u 10:46 - pre 181 meseci
Hocu da ispitam da li je uneti karakter cifra ili ne. Koristim funkciju isdigit. Funkcija lepo radi ako se unose pozitivni brojevi. Problem mi prave negativni brojevi jer karakter '-' nije cifra. Napravio sam neku funkciju ali mi se cini da postoji i elegantnije resenje. Evo koda:
Code:

int isNumber(char *s) {
    if (s[0] == '-') {
        s++;
        return checkNumber(s);
    }
    return checkNumber(s);
}

int checkNumber(char *s) {
    while (*s != '\0') {
        if (!isdigit(*s))
            return 0;
        s++;
    }
    return 1;
}

int main(void)
{
    char str[255];
    int flag;
    printf("Unesi karakter: ");
    gets(str);
    flag = isNumber(str);
    printf("Uneti karakter %s.\n", (flag) ? "je broj" : "nije broj");
    return 0;
}


Zna li neko da li postoji i krace i elegantnije resenje za ovaj problem?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
93.87.4.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: isdigit za negativne brojeve11.05.2009. u 11:08 - pre 181 meseci
Kada je u pitanju konverzija teksta u broj (uz ispitivanje ispravnosti), postoji nekoliko problema.

To oko negativnih brojeva si i sam uvideo. Treba imati u vidu i sasvim validan eksponencijalni zapis broja (slovo E), kao i eventualno tumačenje decimalne tačke (koja može biti i zarez, spram regionalnih podešavanja). O mogućim prekoračenjima da ne pričam, tj. o situaciji kada je broj po funkciji 'validan' ali se ne može kao takav smestiti u primenljivu.

Dakle, ako je tvoj slučaj specifičan (recimo, celi brojevi uz eventualni predznak) onda nije loše napraviti svoje rešenje, kao što si i uradio.

Opštija rešenja pogledaj ovde:
http://www.novetehnologije.com...nvertovanje-teksta-u-broj.aspx

... a ja sam se sa sobom odavno 'dogovorio', pa to uvek radim ovako /pseudo/:
Code:

try
{
   // ovde pokušam dodelu, funkcijom koju nudi biblioteka/framework: atoi() ili StrToInt() ili nešto treće ...
}
catch (...)
{
   // ... ovde znam da postoji problem
}

 
Odgovor na temu

mucky
Aleksandar Mastilović
Freelancer
Novi Sad - Srbija

Član broj: 237
Poruke: 412
*.static.nscable.net.



+1 Profil

icon Re: isdigit za negativne brojeve11.05.2009. u 11:11 - pre 181 meseci
Mešaš pojam cifre i broja - cifre su karakteri '0', '1',..., '9' a celi brojevi su bilo koja kombinacija tih cifara, uz mogućnost da ispred cifara stoji znak + ili -.

Znači, kad dobiješ niz karaktera, proveriš da li je prvi karakter '-' ili '+' ili neka cifra, a za sve sledeće karaktere važi uslov da moraju biti cifre.
 
Odgovor na temu

[es] :: C/C++ programiranje :: isdigit za negativne brojeve

[ Pregleda: 2194 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.