Leitura de arquivo txt na linguagem C

0 respostas
mmrosa

O código abaixo faz a leitura de um arquivo txt e armazena a frequência de cada caracter em vetor global chamado tabela , os índices do vetor representam o número correspondente de cada caracter na tabela ASCII . Exemplo: ‘A’ == 97 na tabela ASCII - o conteúdo de tabela[97] representará a frequência(quantidade de vezes que este caracter aparece no arquivo) do simbolo ‘A’ no arquivo txt. O problema é que quando termino a leitura do arquivo o ultimo caracter sempre recebe +1 em sua frequência e não consigo identificar o porquê.

Exemplo
Conteúdo no txt:
guj

Vetor tabela:
g -> tem frequência 1
u -> tem frequência 1
j -> tem frequência 2 (aqui deveria ser 1)

Segue abaixo as funções utilizadas:
`
int tabela[256] = {0}; // inicializo todas as posições com zero

void ler(int pos){

tabela[pos]++;

}

void ler_arquivo(char const nomeArquivo [])

{

FILE *arquivo = fopen(nomeArquivo, r);
if(arquivo != NULL)
{
    char letra;

    while(!feof(arquivo))
    {
        fscanf(arquivo, "%c", &letra);
        ler(letra);
    }

    //tabela[(int)letra]--;
    // a linha que está comentada logo acima é uma gambiarra que decrementa 1 no conteúdo   correspondente ao ultimo caracter lido e resolve o problema mas isso nao deveria ser necessário 
    fclose(arquivo);
}
else
    puts("Arquivo nao encontrado!\n");

}`

Criado 29 de março de 2016
Respostas 0
Participantes 1