Ir ao conteúdo
  • Cadastre-se
Gustavo.Loggin

Código c++ não lê caractere de arquivo

Recommended Posts

E aí galera! Estou com um pequeno mas estressante probleminha com o meu código c++, será que poderiam em ajudar? Lá vai:

O programa faz o seguinte: Lê caractere por caractere de um arquivo .txt e exibe na tela, (o programa é bem mais complexo mas a parte que está dando erro é essa).

 

Acontece que supondo que exista a seguinte linha no meu arquivo .txt:

variável = 1 * 1

A saída na tela sai:

variável = 1  1

 

Ou seja, ele simplesmente ignora ou não consegue pegar o (*) . Acontece mesma coisa se for um (-). Existe uma função que controla isso e os outros sinais estão OK. Uso o CodeBlocks e usando o Debug percebi que ele vai de caractere em caractere, mas chegando em um (*) ou (-) ele pula e vai pro próximo.

 

Essa é a função que pega caractere por caractere no arquivo .txt:

char RetornaCaractere(){
    char letraArq;
    CarregaArq.get(letraArq); //O objeto "CarregaArq" foi declarado como global, por isso não está aqui...
    return letraArq;
}

Essa é a função que verifica se o caractere é um sinal aritmético e se for, o imprime:

char AnalizaCaractere(){
    char letraArq;

    letraArq = RetornaCaractere();
    switch(letraArq){
    case '{':
        TrataComentario(letraArq);
        break;
    case '-': case '+': case '*': case '/': case '=': case '<': case '(': case ')': case ';': case ':': //Como veem aqui tem um '*' e um '-'
        TrataAritmetica(letraArq);
        break;
    default:
        TrataPalavra(letraArq);
        break;
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Ao invés da letra, tenta colocar o caractere ASCII hexadecimal nos seus cases..

 

* é 0x2A

- é 0x2D

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Miguel Nischor  Então, eu fiz o que você disse mas mesmo assim o problema persiste. Dê uma olhada fazendo um favor nos resultados do debug:

O programa está lendo a linha assinalada em vermelho na imagem 1. Após ler e exibir a palavra "fact" veja que em "Watches" a variável "letraArq" está com um "&" que seria o próximo caractere. Na imagem 2 ela deveria ler o (*), mas ao invés disso ela lê um espaço e logo em seguida (imagem 3) ela lê o "x", ou seja ela simplesmente ignora o caractere (*).

Obs: se eu retirar o "&" o erro continua, e se eu mudar a linha de lugar também.

 

1.jpg

2.jpg

3.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Tenho quase certeza que o erro não é na função que você passou acima... E sim no tratador de caracteres...

 

Já que é um "compilador", porque não usa um tratador pronto, mais evoluído: Vídeo

 

*EDITADO* Tenta trocar o asterisco por \x2A

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×