Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: if -rakenne onglema C:llä

Sivun loppuun

Baglair [04.01.2006 23:13:48]

#

Tämmönen on ehtolauseke:

if((heksat[x] > 9 && heksat[x] < 'a') || heksat[x] < 0 || heksat[x] > 'f')   {
   ...
}

Ja ongelmana on nyt se, että lauseke hyväksyy kaikki numerot väliltä 0 - 9 vaikka ei pitäisi ja olen aivan ymmälläni miksi se tekee niin.'

EDIT:
Toimii jos laittaa sen muotoon

if('a' > heksat[x] > 9|| heksat[x] < 0 || heksat[x] > 'f')   {
   ...
}

Mistä tämä johtuu? Kenties syntax error vai enkö huomannut jotain?

Jaska [04.01.2006 23:24:11]

#

Ainakaan tuo ei ole hyvää ohjelmointityyliä. Ensiksi vertaat muuttujaa int-muuttujaan ja sitten char-arvoon. Minä muuttaisin kaikki vertailut samojen tyyppien välisiksi. Mahtaisiko tämä ratkaista ongelmasi?

Ja mitä lause 'a' > heksat[x] > 9 tarkoittaa? Sehän palautuu joko muotoon false > 9 tai true > 9. Mitäköhän ajat tällä takaa?

Chiman [04.01.2006 23:27:06]

#

Onkohan tarkoitus tämä?

if((heksat[x] > '9' && heksat[x] < 'a') || heksat[x] < '0' || heksat[x] > 'f')

FooBat [04.01.2006 23:31:16]

#

Baglair kirjoitti:

Tämmönen on ehtolauseke:

if((heksat[x] > 9 && heksat[x] < 'a') || heksat[x] < 0 || heksat[x] > 'f')   {
   ...
}

Ja ongelmana on nyt se, että lauseke hyväksyy kaikki numerot väliltä 0 - 9 vaikka ei pitäisi ja olen aivan ymmälläni miksi se tekee niin.'

Ascii numerokoodit merkeille '0'-'9' ovat 48-57, joten ensimmäinen ehto toteutuu niillä (9 < 48-57 < 97)

if(heksat[x] > 9 && heksat[x] < 'a') .. // 'a' = 97

Baglair kirjoitti:

EDIT:
Toimii jos laittaa sen muotoon

if('a' > heksat[x] > 9|| heksat[x] < 0 || heksat[x] > 'f')   {
   ...
}

Mistä tämä johtuu? Kenties syntax error vai enkö huomannut jotain?

Itse vahvasti epäilen, että tämä lause ei tee sitä mitä haluat. Ensimmäinen ehto on aika erikoinen:

'a' > heksat[x] > 9
==
('a' > heksat[x]) > 9  //heksat[x] = '0'-'9'
==
1 (true) > 9
==
0 (false)

phadej [04.01.2006 23:32:41]

#

jotain ihmeellistä tässä ollaan hakemassa

#include <ctype.h>
int isxdigit( int ch )

"The function isxdigit() returns non-zero if its argument is a hexidecimal digit (i.e. A-F, a-f, or 0-9). Otherwise, zero is returned."

(se on kyl melkein aina macro)

Baglair [04.01.2006 23:33:18]

#

Tarkoitus on siis suorittaa ehto, jos luku ei ole väliltä 0 - 9 tai 'a' - 'f'.

phadej [04.01.2006 23:34:46]

#

eli jos luku ei ole heksa niin

if (!isxdigit(heksat[x])) {
   // ei oo heksa
}

FooBat [04.01.2006 23:38:32]

#

Yksinkertaisesti itse kirjoitettuna tuo olisi

char c = heksat[x];
if(! ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')) )

Baglair [04.01.2006 23:38:56]

#

Juu kiitos sain nyt toimimaan


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta