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?
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?
Onkohan tarkoitus tämä?
if((heksat[x] > '9' && heksat[x] < 'a') || heksat[x] < '0' || heksat[x] > 'f')
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 muotoonif('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)
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)
Tarkoitus on siis suorittaa ehto, jos luku ei ole väliltä 0 - 9 tai 'a' - 'f'.
eli jos luku ei ole heksa niin
if (!isxdigit(heksat[x])) { // ei oo heksa }
Yksinkertaisesti itse kirjoitettuna tuo olisi
char c = heksat[x]; if(! ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')) )
Juu kiitos sain nyt toimimaan
Aihe on jo aika vanha, joten et voi enää vastata siihen.