Ir ao conteúdo
  • Cadastre-se

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


Gustavo.Loggin

Posts recomendados

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

 

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...