[ strahinja_ftn @ 17.12.2005. 19:51 ] @
Pitanje je sledece: Da li je moguce da ulazna konverzija bude %d tj. int a da program proverava da li je korisnik uneo ceo broj? kada stavim da je ulazna konverzija %d program prima samo prvi ceo broj npr: 33.45 program primi 33, a 45 unese kao sledeci podatak. Meni treba da izbaci poruku o gresci i da se unos vrsi ponovo. Ak' nek' zna pomagaj!!
[ del-boy @ 17.12.2005. 20:34 ] @
Koristi konverziju za realne tipove (%f ili %lf) i onda proveri kof je tipa promenljiva! I mene je zanimalo kako da odredim kod je tipa promenljiva pa sam pitao! Pogledaj temu http://www.elitesecurity.org/t...aznati-kog-je-tipa-promenljiva!

btw. Kolega, dobrodošao na forum! :D
[ strahinja_ftn @ 18.12.2005. 00:33 ] @
Pozz! Markoski (asistent) kaze da sve moze da se odradi sa int-om. Ja koristio double a on kaze da mu se ne svidja posto zauzima vise memorije?! Mora da moze sa int-om ali kako???
[ NrmMyth @ 18.12.2005. 09:38 ] @
Neka ti on onda pojasni pa nam ti postaj da vidimo sta je to bilo.
[ X Files @ 18.12.2005. 10:04 ] @
Citat:

Ja koristio double a on kaze da mu se ne svidja posto zauzima vise memorije?!


:) Štedljiv neki čovek...

No, dobro...


// NETESTIRANO !!!

Code:

#include <stdlib.h> // zbog system PAUSE
#include <stdio.h> // zbog printf, scanf, ...

int main(int argc, char* argv[])
{
    int x;
    int y;

    printf( "Unesi prvi broj:" );
    scanf( "%d", &x);

    // **************************************
    fflush ( stdin ); // <- MOŽDA OVO
    // **************************************
        
    printf( "Unesi drugi broj:" );
    scanf( "%d", &y );

    printf ( "x=%d, y=%d\n", x, y );

    system( "PAUSE" );
    return 0;
}





[Ovu poruku je menjao X Files dana 18.12.2005. u 11:07 GMT+1]
[ NrmMyth @ 18.12.2005. 11:08 ] @
Bojim se da nisi shvatio covjeka. Pogledaj prvi post.
[ del-boy @ 18.12.2005. 12:20 ] @
Citat:
strahinja_ftn: Pozz! Markoski (asistent) kaze da sve moze da se odradi sa int-om. Ja koristio double a on kaze da mu se ne svidja posto zauzima vise memorije?! Mora da moze sa int-om ali kako???


Meni nije on asistent nego Žarko, a on ne zeza mnogo oko tih stvari! Ovo što on traži ne znam kako da uradim. Pitaj njega!
[ X Files @ 18.12.2005. 12:54 ] @
Ono sto znam od ranije je da scanf() funkcija omogucuje samo osnovnu
funkcionalnost unosa, i ne ostavlja previse mesta za validaciju unosa. Za bilo
koji ozbiljniji unos treba koristiti buffere koji se kasnije parsuju po zelji.

dakle: fgets, fflush, sscanf, ...

Mozda moze i sa scanf, ali ja ne znam...







Ovde ima mozda jedno od lepsih resenja...
http://andromeda.fesb.hr/fesbX...is/diskretni/cstart/c_055a.htm

[Ovu poruku je menjao X Files dana 18.12.2005. u 18:25 GMT+1]
[ Nedeljko @ 18.12.2005. 19:13 ] @
Citat:
strahinja_ftn: Pozz! Markoski (asistent) kaze da sve moze da se odradi sa int-om. Ja koristio double a on kaze da mu se ne svidja posto zauzima vise memorije?! Mora da moze sa int-om ali kako???

Mislim da je hteo da kaže da se zadatak koji rešavaš može uraditi bez realnih tipova, a ne da se to odnosi na unos sa tastature. Za 100% bezbedan unos unosi stringove, pa ih onda parsiraj. Znači, za unos koristi fgets(), pa onda konvertuj.
[ X Files @ 18.12.2005. 21:51 ] @
Mozda ovako, za proveru unosa (nekog integera)

Code:

#include <stdio.h>
int main()
{
    int ret, x = 0;
    char c;

    printf( "Unesite X: " );
    ret = scanf( "%d", &x );

    printf( "X = %d\tret = %d\n", x, ret );

    if( ret != 1 )
       printf("Nije broj!\n");
    else
    {
       ret = scanf("%c", &c);
       if ( c != '\n' )
          printf("Greska!\n");
    }
    system( "PAUSE" );
    return 0;
}
[ strahinja_ftn @ 21.12.2005. 10:40 ] @
Sad kaze da u opste nemora da se vrsi provera zato sto jos nismo stigli do toga?! Eto tako vam je to.
Mada drugi asistent kaze da se tor radi sa fgets.
[ X Files @ 21.12.2005. 16:43 ] @
fgets() je najbolje resenje jer se lako moze naknadno ispitati sta je uneto... u svakom
slucaju imas kod gore koji sam ostavio, i koji radi, pa kombinuj...
[ chupcko @ 30.12.2005. 12:34 ] @
Nije mi bas najjasnije sta zelis da uradis, ali ajde da pokusam da rekonstruisem pitanje:

Zelis koristeci samo int promennljive da ucitas neki niz karaktera i da dozovlis unosenje samo celobrojnih vrendosti:

3287 => ispravno
-76 => ispravo
783.0000 => ispravno (ili mozda nije)
788.6576 => neispravno

Recimo nesto ovako ti moze dosta pomoci ?

Code:

#include <stdio.h>

int main(void)
{
  int a, b, n;

  n = scanf("%d.%d", &a, &b);
  printf("n:%d a:%d b:%d\n", n, a, b);
}


CIsto za podsetnik: scanf vraca koliko je uspesno skeniranih entiteta pronasao :).
Mozes da koristis i %*d, u tom slucaju on ocekuje broj ali ga ne smesta ni u jednu varijablu :).

Doduse kao sto neko rece, mozda je najoblje da sam napravis neki automat za prepoznavanje brojeva na ulazu.

P.S. man 3 scanf
[ Mali Misha @ 30.12.2005. 15:41 ] @
Ako pristupis buffer-u stdin, mozes direktno da procitas sta je ostalo iza int-a. Ako ti je samo bitno da nije unet realan broj dovoljno je da proveris da li su ostali tacka ( '.' ) i jedna cifra ( '0' - '9' ). Ako korisnik treba da unese striktno samo int, tamo treba da se nadje samo znak za novu liniju ( '\n' ).

Sad, eh, ja samo ne znam standardan nacin da se do ovog bafera dodje. Kod MS VC++ 6.0 je to stdin->_ptr kod BCC 5.5 stdin->curp. Dakle, recimo ovako:

Code:
#include <stdio.h>
#include <ctype.h>

main()
{
    int x;

    scanf("%d",&x);

    if(stdin->_ptr[0]=='.' && isdigit(stdin->_ptr[1]) )
    {
        printf("NOT OK"); // realan broj
    }
    else printf("OK"); // ceo broj + moguc ostatak koji nije realan br.
    
    return 0;
}
ili
Code:
// ...
    if(stdin->_ptr[0]=='\n')
    {
        printf("OK"); // samo ceo broj
    }
    else printf("NOT OK"); // ceo broj + ostatak
// ...

Ako gresim, bicu ispravljen ;)