• 4 odgovora
  • 3.365 pregleda
provera opsega celobrojne promenljive 21.05.2004. u 02:06 · pre 273 meseci #1
Potrebno je da za odredjenu promenjlivu osiguram da ima celobrojni opseg od 0 do 255. Posto se radi o broju, ja sam jednostavno naveo da je ta promenljiva unsigned char i svaki put kada mi je potrebna njena vrednost ja uradim typecasting u unsigned short. Na slican nacin sam osigurao da korisnik ne moze da unese vrednost van ovog opsega, jer svaki put kad se unosi broj, ja ga "uglavim" izmedju 0 i 255 tako sto ga typecastujem nazad u unsigned char. Da li je ovo dobro, ili da batalim taj nacim i da jednostavno ogranicim mogucnost unosa vrednosti promenljive?
Potpis
...znam koliko ne znam... ili ne?
Re: provera opsega celobrojne promenljive 21.05.2004. u 16:44 · pre 272 meseci #2
Bolje i jednostavnije ti je staviti uslov tipa:
if ((a>=0) && (a<=255))
{
//something
}
else
{
//error
}

Jesi li se zapitao šta će se desiti ako korisnik unese veci broj od 255?
Potpis
Razlika izmedju softvera i hardvera je:
Softver je nesto sto mozes psovati, a hardver je... pa hardver je nesto sto mozes sutati
Re: provera opsega celobrojne promenljive 21.05.2004. u 17:29 · pre 272 meseci #3
Obično nije dobra ideja da tako svodiš na opseg. To je zato što ti u različitim situacijama može zatrebati različita obrada prekoračenja: na primer premotavanje, zasićenje ili nešto treće. Ako opseg ograničiš konverzijom onda si na milost i nemilost kompajlera.

f
Re: provera opsega celobrojne promenljive 22.05.2004. u 00:21 · pre 272 meseci #4
Cast-ovanje bi bilo ocajno lose resenje za to sto pokusavas (tj. clipping).

Evo kontra primera:

int main(void)
{
int x = 0x7FFFFF01;
unsigned char ch = (unsigned char)x;

printf("ch = 0x%X", ch);
return 0;
}

pa ces videti da cast-ovanje zapravo zadrzava samo least significant byte (LSByte) i
to metodom odsecanja, sto nikako ne daje to sto hoces.
Re: provera opsega celobrojne promenljive 22.05.2004. u 02:01 · pre 272 meseci #5
...eh... hvala... pa ono sto sam ja imao na umu je da kad korisnik unese broj veci od 255, kompajler ga jednostavno "premota" u opseg od 0 do 255, ali sad vidim da to bas i ne igra :) onda cu ipak da idem na if (x>255 || x<0)... a taman sam mislio da sam provalio neko bas elegantno resenje :))
Potpis
...znam koliko ne znam... ili ne?
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme