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");
}`