[ mleposavic_lepi @ 12.01.2006. 11:42 ] @
Kako da odradim kontrolu unosa podataka, potrebno je da se pri unosu podataka samo unose brojevi od 0 do 9 i tacka za decimalne brojeve, a kad se unese nesto drugo da se dobije poruka o gresci. Potreban je sto kraci kod da bih ga uneo u vec postojeci program.

Imam vec odradjen program za kontrolu unosa ali je predugcak, treba mi nesto manje.

Hvala unapred!!!
[ del-boy @ 12.01.2006. 13:48 ] @
Misliš treba ti samo unos realnih brojeva?
Funkcija scanf vraća broj uspešno učitanih vrednosti, tako da ako na primer komantom scanf("%f", &k) čekaš neki unos a korisnik unese slovo ova funkcija će vratiti 0, a ako unese ispravan realan broj vratiće 1.

Znači posle unosa proveri if (scanf("%f", &k)) {radi nešto} else {printf("GRESKA!!!");}

Nadam se da si na to mislio!
[ mleposavic_lepi @ 13.01.2006. 18:06 ] @
Evo postavicu ti ovo sto imam ali sam mislio da odradim sto krace jer je ovaj kod preobiman. U pitanju je kontrola unosa podataka kod programa za menjacnicu, znaci kad korisnik unese slovo da prikaze gresku i da korisnik ponovi unos.

Evo koda: [quote]

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>

#define NOVI_RED 0x0D
#define RAZMAK 0x20
#define CIFARA 6 /* 5 mesta za cifre i jedno mesto za tacku = ukupno 6 */

void provera ( char * );

void main ()
{
char uuu [CIFARA+1]; /* dimenzionisanje stringa */
double prod_kurs;

printf ( "Unesite prodajni kurs: " );
provera ( uuu );
prod_kurs = atof ( uuu );
printf ( "\nUneli ste prodajni kurs: %.2f\n", prod_kurs );

}


void provera ( char * pom_str )
{
int c;
int brojac = 0; /* brojac unetih cifara */


/* idemo sa funkcijom getch */
while ( ( c = getch () ) != (int) NOVI_RED ) /* zavrsetak unosa je taster ENTER */
{
switch ( (char) c )
{
case 0x2E: /* tacka */
case 0x30: /* broj 0 */
case 0x31: /* broj 1 */
case 0x32: /* broj 2 */
case 0x33: /* broj 3 */
case 0x34: /* broj 4 */
case 0x35: /* broj 5 */
case 0x36: /* broj 6 */
case 0x37: /* broj 7 */
case 0x38: /* broj 8 */
case 0x39: /* broj 9 */
putchar ( c ); /* echo - getch funkcija ne prikazuje kod pritisnutog tastera */
*pom_str++ = (char) c; /* popuni string */
brojac++; /* azuriraj brojac */
break;

/* nedozvoljeni tasteri */
default:
putchar ((int) RAZMAK); /* ponisti pritisnut taster */
printf ( "\a\b" ); /* jedan beep i vrati kursor */
break;
}
if ( brojac == CIFARA ) break; /* boundary checking */
}

*pom_str = 0; /* terminiraj string */
}
[ IDE @ 13.01.2006. 21:52 ] @
ja bih to mozda ovako uradio: napisao bih f-ju koja provjerava ono sto joj je poslato i ako joj je poslat broj ili tacka: vraca 1, a ako je nesto drugo poslato: vraca 0.Nadam se da ce ti ovo pomoci...
Code:

int kontrola(char a)
{
if(a>='0' && a<='9' || a=='.')
return 1;     vraca 1 ako je unesen samo broj ili tacka
else
return 0;     vraca 0 ako je uneseno nesto drugo
}


a u main() - u bih slao svaki pritisak tastera ovoj f-ji i tako odmah provjeravao sta je pritisnuto....
ma ima puno nacina...



[Ovu poruku je menjao fucking voodoo dana 13.01.2006. u 22:55 GMT+1]
[ _Doctor_ @ 16.01.2006. 23:13 ] @
Slazzem se sa kolegom fucking voodoo, samo shto bi ja josh malo skratio:

Code:

int check (char ch) {
  return (ch >= '0' && ch <= '9') || ch == '.';
}


pozdrav