[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Problemas com o if



no meu ep3a eu estou tento um problema muito estranho.
en certa altura do programa, desejo saber se o caractere que está sendo lido
é uma letra ou um caractere separador de palavras.
o código é o seguinte

if (    (palavra[posicao]>'Z' && palavra[posicao]<'a')
||palavra[posicao]<'A'
||(palavra[posicao]>=123 && palavra[posicao]<=126)     ){
/*serao considerados separadores de palavras todos carac. nas condicoes
acima
os outros caracteres da tabela sao considerados letras e portanto, podem
ser parte de palavras. Os numeros podem separar palavras, logo, por exemplo
abacaxi9melancia e' considerado duas palavras separadas, como se houvesse um
espaco entre elas.*/

o caractere atual é representado por palavra[posicao]
nesse caso, o if testa se o caractere é um separador, ou seja, (, . ! ? { }
etc)
considerei separador assim:

1 - todo caractere da tabela ASC entre o "Z" e o "a"
2 - todo caractere < "A" (inclusive os números)
3 - os caracteres 123, 124, 125 e 126 da tabela ASC

os outros caracteres são todos letras que podem formar palavras

Agora a parte estranha:
quando o caractere testado tem código asc >126, o programa "entra" no if.
Nào deveria entrar, pois não consta nas condições. O mais engraçado é que,
se eu coloco essa expressão, exatamente como ela aparece acima, no "WATCH"
do TURBO C++, ele retorna o valor com "0", ou seja, a condição é falsa.
E agora?
O "WATCH" diz que é falsa, mas o programa entra na condição!!! Onde estou
errando!

Daniel Cukier