[ stale85 @ 24.06.2003. 14:47 ] @
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;
}
}
[ Vesic @ 25.06.2003. 02:55 ] @
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.
[ leka @ 25.06.2003. 04:02 ] @
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...