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

Re: Problemas com o if



Ola!

  Acho que voce especificou o ponteiro como "char *palavra" ou algo
assim. Experimente usar "unsigned char"; se vc usar o tipo com sinal,
todos os caracteres acima de 127 retornarao numeros negativos, e a
condicao "palavra[posicao] < 'A'" sempre retornara verdadeira...

T+
Wagner Bruna
wbruna@linux.ime.usp.br


On Tue, 17 Nov 1998, Daniel Cukier wrote:

>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
>
>