int getc (FILE * fluxo);
Lê o caractere presente na posição atual do fluxo interno. Após a leitura, a posição atual é avançada para o próximo caractere.
A função fgetc é equivalente a esta, mas é implementada como uma função. A getc é implementada como um macro.
fluxo - Ponteiro para um objeto FILE que será utilizado como entrada. Como getc é implementada como um macro, o fluxo deve ser uma expressão sem efeitos colaterais. Por exemplo, não é recomendável utilizar getc(fopen("arquivo.txt", "r")), pois isso pode causar múltiplas chamadas a função fopen (sem contar o fato de não ser possível fechar o arquivo aberto utilizando fclose, devido a não ser guardada uma referência).
Em caso de sucesso, a função retorna o caractere lido. O valor é retornado como um unsigned char convertido para um int.
Se o fluxo está no fim do arquivo ou um erro de leitura aconteceu, a função retorna EOF. As funções feof e ferror precisam ser utilizadas para distinguir entre um verdadeiro EOF ou um erro de leitura.
#include <stdio.h>
int main() {
FILE* arquivo = fopen("arquivo.txt", "r");
if(arquivo == NULL) {
fprintf(stderr, "Erro ao abrir o arquivo.txt.");
return 1;
}
int linhas = 0, espacos = 0;
int caractere;
do {
caractere = getc(arquivo);
if(caractere == ' ') {
espacos++;
} else if(caractere == '\n') {
linhas++;
}
} while(caractere != EOF);
printf("O arquivo possui %d espacos e %d linhas.\n", espacos, linhas);
fclose(arquivo);
return 0;
}