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

Provera ulaznih podataka

[es] :: C/C++ programiranje :: Provera ulaznih podataka

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

stale85
Stanislav Antic
Student
Sremčica

Član broj: 6670
Poruke: 120
*.4.eunet.yu



Profil

icon Provera ulaznih podataka24.06.2003. u 14:47 - pre 253 meseci
Imam program za koji mi treba provera unosa. Na primer ako korisnika pitam koju opciju zeli
cout <<"(Unesite broj bez tacke na kraju)#";
cin >> glavniMeni;
glavniMeni promenljiva je tipa int. Pokusao sam sa funkcijom isdigit() (iz ctype.h) ali ona mi je uvek davala vrednost 0.
void ProveraUnosaBroja(int i)
{
if (!isdigit(i))Imam program za koji mi treba provera unosa. Na primer ako korisnika pitam koju opciju zeli
cout <<"(Unesite broj bez tacke na kraju)#";
cin >> glavniMeni;
glavniMeni promenljiva je tipa int. Pokusao sam sa funkcijom isdigit() (iz ctype.h) ali ona mi je uvek davala vrednost 0.
void ProveraUnosaBroja(int i)
{
if (!isdigit(i))
{
cout << "Nije digitalni broj";
i = 0;
}
}
{
cout << "Nije digitalni broj";
i = 0;
}
}
Ken Thompson has an automobile which he helped design. Unlike most automobiles, it has neither speedometer, nor gas gauge, nor any of the other numerous idiot lights which plague the modern driver. Rather, if the driver makes a mistake, a giant “?” lights up in the center of the dashboard. “The experienced driver,” says Thompson, “will usually know what’s wrong.”
 
Odgovor na temu

Vesic

Član broj: 3820
Poruke: 62
*.net.hinet.hr



Profil

icon Re: Provera ulaznih podataka25.06.2003. u 02:55 - pre 253 meseci
Nikad nisam koristio funkciju isdigit() tak da ne znam dal si mozda fulao negdje u sintaksi il nesto... Ne znam ni koju bi ti drugu funkciju preporucio, ali evo mozda ti ovako nesto pomogne:

Code:

int main() {
  int i;
  cout << "Unesi broj: ";
  cin >> i;
  cout << endl << endl;
  if (i > 0 && i < 5 )
    cout << "Tvoj izbor je: " << i << endl << endl;
  else
    cout << "Ne moze!" << endl << endl;
}


Ovo bi bilo za meni koji ima 4 opcije. Operatori vece od (>) i manje od (<) su jasni, logicki operator and (&&) znaci da oba uvjeta moraju biti zadovoljena.
Jedino je frka to sto ce na unose zankova kojima je ASCII vrijednost jednaka nekom od broja opcije biti prihvacen kao vazeci, ali nadam se da je to neki osobit problem u ovom slucaju.
Don't take life too seriously... Nobody gets out alive, anyway.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: Provera ulaznih podataka25.06.2003. u 04:02 - pre 253 meseci
Neću namerno da ti tačno kažem gde grešiš, umesto toga ću ti dati izvod iz man isdigit:
Code:

RETURN VALUE
       The  values  returned  are  nonzero  if  the character c falls into the
       tested class, and a zero value if not.

Druga stvar, ovo je deklaracija isdigit() funkcije:
Code:
int isdigit(int c);

Razmisli o argumentu c - kakvu vrednost preko tog argumenta predaješ funkciji? - Odgovor je takođe u man strani:
Code:

These  functions  check  whether  c,  which  must  have the value of an
       unsigned char or EOF, falls into a certain character class according to
       the current locale.

I nek neko kaže da man ne vredi zlata... :)

Još jedan primer:
Code:

[dejan@gnu cxx]$ cat myprog.c
#include <stdio.h>

int main(int argc, char** argv)
{
    int iTest;
    iTest = isdigit(55);
    printf("Isdigit: %d \n", iTest);
    
    return 0;
}
[dejan@gnu cxx]$ gmake myprog
cc     myprog.c   -o myprog
[dejan@gnu cxx]$ ./myprog 
Isdigit: 2048 

Da ne bude zabune - moj locale nije difolt, već nešto deseto... Da sam stavio recimo
Code:

iTest = isdigit(5);
Dobio bih 0 kao rezultat...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

[es] :: C/C++ programiranje :: Provera ulaznih podataka

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

Postavi temu Odgovori

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