[ pejan123 @ 04.05.2006. 16:40 ] @
Treba mi konkretan primer koriscenja zastite za unos karaktera, i/ili simbola. Ili barem neka ideja.
Ako moze preko while nekako?
Kod za zadatak sam odradio bez problema, samo mi ovo fali.
Hvala puno. :)
[ NrmMyth @ 04.05.2006. 17:26 ] @
A sto je to "zastita za unos karaktera" ?
[ pejan123 @ 04.05.2006. 17:44 ] @
Pri unosu podataka je ne zelim da mi korisnik unosi slova ili simbole, vec samo brojeve.
Pa ako korisnik unese slovo, zelim da se pojavi poruka o gresci i ponovni unos.
Nisam se ranije dobro izrazio, jel tako?
[ mulaz @ 04.05.2006. 18:03 ] @
ako imas char slovo;

onda proveravas if (slovo <= 'a' && slovo => 'z') ...
ne mogu da se setim kojim redom idu slova sad.. a...zA..Z ili prvo velika slova, pa onda mala

proveravaj ti samo da je vece/jednako od 'a' i manje/jednako od 'z'
(provri ascii tabelu da vidis dal pocinje sa malim ili velikim 'a' i gde se zavrsava
[ NrmMyth @ 04.05.2006. 18:35 ] @
Tako nesto vec postoji.

http://www.cppreference.com/stdstring/index.html

Pogledaj ove funkcije sta pocinju sa "is".
[ del-boy @ 04.05.2006. 19:32 ] @
greška sa ajaxom oko izmene poruke! Za detalje pogledati http://www.elitesecurity.org/poruka/1138084 ! Uglavnom ako moderator može da obriše...

[Ovu poruku je menjao del-boy dana 04.05.2006. u 20:56 GMT+1]
[ del-boy @ 04.05.2006. 19:47 ] @
Mislim da bi ovde najbolje bilo prožimeniti činjenicu da scanf vraća vrednost!

Kada napišeš recimo scanf("%d", &a), ovo će kao povratnu vrednost dati broj uspešno učitanih podataka (u ovom slučaju 1, ako je korisnik uneo ceo broj)!

E sad, ako to staviš u petlju imaš dobar alat za proveru:
Code:

printf("Unesi a: ");
while (!scanf("%d", &a) {
         printf("GRESKA! Unesi ponovo: ");
}


Ove funkcije koje su ostali naveli mislim da služe za proveru karaktera, odnosno provera šta je zadati znak u ASCII tabeli! To takođe možeš da iskoristiš, ali onda moraš sve da unosiš kao karakter, što malo komplikuje stvari kada je u pitanju broj sa više cifara!
[ pejan123 @ 04.05.2006. 20:15 ] @
Prvo hvala na svim odgovorima :)
ok, pokushao sam ovaj primer shto je del-boy predlozio.

Code:

#include <stdio.h>

main()
{
       int a;

       printf("Unesi a: ");
       while (!scanf("%d", &a)) {
         printf("GRESKA! Unesi ponovo: ");
       }
       //scanf("%d",&a);
}


Trebalo bi da radi ok, ali mi prejavljuje greshku (poruka o istoj), onako dok ne lupim ctrl+c.

pokushao sam i

Code:

#include <ctype.h>
  int isspace( int ch );

shto je predlozio NrmMyth.

ubacio sam ga u meni potreban zadatak.
oblika:
Code:

...
do{
        printf("\nUnesite broj takmicara: \n\tN = ");
        scanf("%c",&n);
        if(isspace(n))printf("\n ne moze! ");
     }while(n<2||n>max_dim||isspace(n));
     
     
     for(i=0;i<n;i++)
     {
                     for(j=0;j<3;j++)
                     {
                          do{
                            if(j==0) printf("\nUnesite tezinu koju je %d. takmicar podigao u dizanju sa trzanjem: \n\tA = ",i+1);
                            if(j==1) printf("\nUnesite tezinu koju je %d. takmicar podigao u dizanju sa izvlacenjem: \n\tB = ",i+1);
                            if(j==2) printf("\nUnesite tezinu %d. takmicara: \n\tC = ",i+1);
                            scanf("%c",&a[i][j]);
                            if(isspace(n))printf("\n ne moze! ");
                          }while(a[i][j]<1||isspace(a[i][j]));
                     }
     }
...


Funkcija radi svoj posao, ali ponegde mi duplira prijavu greshke i tekst za unos, shto je mozda posledica duple for petlje, al shta da radim kad moram da koristim matrice.

Shto se tiche del-boy ovog resenja verovatno je dobro, mozda mi je kompajler zeznuo stvar, a mozda i nije :)
[ del-boy @ 04.05.2006. 21:08 ] @
Da, vidi stvarno, i meni upadne u beskonačnu petlju! Nisam testirao kod pre nego što sam napisao, ali bi trebalo tako da radi!

Pogledaću kasnije da probam da skontam u čemu je problem, sad sam malo u frci...


btw: Kolega, jel' Markoski? FTN, E1?
[ pejan123 @ 04.05.2006. 22:46 ] @
otkud znash :D
ti isto kolega a ;)
[ pejan123 @ 05.05.2006. 01:24 ] @
jao del-boy :)
sad vidim otkud znash :D
malo sam se proshunjao po forumu i vidim da su nekoliko likova trazili domace :)
moje drage kolege.
sve uzastopno. :/
Nemoj samo kompletne zadatke da im dajesh, ako se navade trazice svaki put.
Znam iz lichnog iskustva.
Inache ovo shto trazim, nije za domaci.
Markoski meni i nekom liku daje skoro svaki chas neshto extra da odradimo, jer smo kako kaze najglasniji ;)
A onda kad ne umemo da odradimo, da nam 9 na 10. :/
Kod mene znam da pola uzme da prepishe.
Mora da ce im biti lepo na kolokvijumu i kad bude posle cpp.
[ del-boy @ 05.05.2006. 03:00 ] @
Da, vidiš i sam sad! Napisao sam negde da sam E2!

Uradio sam par domaćih jer sam imao vremena, a i imam par ortaka na E1, pa često dolazim u dodir sa vašim skriptama, a samim tim i onako usput skontam rešenje! Samo kodiranje mi ne uzima mnogo vremena, pa ga ponekad odradim!

A što se tiče ovog koda za proveru, sad sam 10ak minuta pokušavao da ga nateram da radi kod mene i ne uspevam! 100% je neka glupost od greške, ali spava mi se mnogo, ne mogu više da tražim... Koliko znam, ovo ti treba za ponedeljak, pa ako ja ne stignem neko drugi će se naći da ti pomogne... Čisto da pitam, sa kojim kompajlerom radiš?

Meni nije Markoski bio asistent, nego Žarko (mislim da on kod vas nikome ne drži vežbe), tako da ne znam direktno njegov sistem rada, ali čuo sam :|. Kolokvijum ti inače bude opuštencija ako si sve domaće radio sam, a koliko vidim radiš, tako da to ne bi trebalo da ti bude problem!

btw: Kako nije domaći? Taj isti domaći imaju i ovi ortaci (neki imali za danas (sad već juče), a neki za ponedeljak)...
[ yooyo @ 05.05.2006. 10:55 ] @
Code:
    
 printf("Unesi a: ");
 while (!scanf("%d", &a)) 
 {
    printf("GRESKA! Unesi ponovo: ");
    fflush(stdin); // ovo je falilo.
 }


scanf nije uspeo da procita pa je ostavio u stdin bufferu stanje pre pokusaja da procita. fflush(stdin) ce isprazniti stdin pa onda mozete ponovo da pokusate scanf.
[ pejan123 @ 05.05.2006. 15:24 ] @
Citat:
btw: Kako nije domaći? Taj isti domaći imaju i ovi ortaci (neki imali za danas (sad već juče), a neki za ponedeljak)...


jeste domaci ali taj deo za zastitu od space mi je bio extra :)

Citat:
Čisto da pitam, sa kojim kompajlerom radiš?


Radim sa Bloodshed dev cpp, novija verzija.
Ako znash neki bolji obavezno mi javi.

yooyo, hvala puno na resenju misterije, probacu cim se malo odmorim, al kontam da je ok. :)
[ cynique @ 05.05.2006. 15:51 ] @
Citat:
yooyo: fflush(stdin) ce isprazniti stdin pa onda mozete ponovo da pokusate scanf.


fflush(3) nije definiran za input streamove po C standardu. Radi na windowsima, ali za ostale platforme ne mora nužno.