Para usar um arquivo como entrada do seu programa, crie inicialmente
uma variável do tipo FILE. Por exemplo:
FILE *arqentrada;
onde arqentrada é o nome da variável que deve ser obrigatoriamente do tipo ponteiro. Antes de ler qualquer dado do arquivo, você deve abrí-lo para leitura. Para isso, você deve usar o comando fopen, por exemplo:
arqentrada = fopen( "entrada.txt", "r" );
O primeiro argumento é o nome do arquivo a ser aberto. O segundo argumento "r" significa "read" (arquivo para leitura). O comando fopen devolve um ponteiro que deve ser armazenado na variável do tipo FILE que você criou anteriormente. Se por algum motivo ele não conseguir abrir o arquivo (por exemplo, o arquivo não existe), fopen devolve um ponteiro nulo.
Agora que o arquivo está aberto, você pode ler seus dados usando o comando fscanf. Ele é idêntico ao comando scanf, com a diferença que o primeiro argumento é o ponteiro do arquivo. Por exemplo:
fscanf(arqentrada, "%c", &letra);
O comando acima lê um caracter do arquivo e armazena-o na variável letra.
Para ver se você já chegou ao fim do arquivo, use a função feof(arqentrada). Ela devolve verdadeiro se o fim do arquivo for alcançado. Ao final da leitura, deve-se sempre fechar o arquivo usando o comando fclose(arqentrada). Veja o programa exemplo a seguir:
/* Este programa
lê um arquivo chamado "entrada.txt"
e imprime o seu conteúdo na tela */
#include <stdio.h>
int main() {
FILE *arqentrada;
char letra;
/* abre o arquivo para leitura */
arqentrada = fopen("entrada.txt", "r");
/* se não conseguiu abrir o arquivo */
if (arqentrada == NULL) {
printf("Não consegui abrir o arquivo.\n");
return 0;
}
/* enquanto não for fim do arquivo */
while (!feof(arqentrada)) {
/* lê o próximo caracter */
fscanf(arqentrada, "%c", &letra);
/* imprime o caracter na tela */
printf("%c", letra);
}
/* fecha o arquivo */
fclose(arqentrada);
return 0;
}
Para testar esse exemplo, você vai precisar de um arquivo texto chamado "entrada.txt". Se você usar o lcc, após a compilação, o programa executável estará num subdiretório (provavelmente chamado de lcc). O seu arquivo texto deve estar lá para o programa funcionar.
Para escrever a saída em um arquivo, pode-se proceder de
maneira semelhante. Primeiro, cria-se uma variável do tipo FILE,
exatamente como foi feito para leitura. Exemplo:
FILE *arqsaida;
Para abrir o arquivo, deve-se usar o comando:
arqsaida = fopen("entrada.txt", "w");
O parâmetro "w" significa "write" (arquivo para escrita). Estando o arquivo aberto, pode-se escrever nele usando o comando fprintf, que é muito semelhante ao comando printf. A diferença, como no fscanf, é que o primeiro parâmetro deve ser o ponteiro para o arquivo. Exemplo:
fprintf(arqsaida, "O valor de x é %d.\n", x);
Este comando imprime o valor da variável x no arquivo de saída. Ao final da escrita, deve-se sempre fechar o arquivo usando o comando fclose(arqsaida). Veja o programa exemplo a seguir.
/* Este programa
lê do teclado uma sequência de números inteiros e grava-os
no arquivo "saida.txt". O programa termina quando o usuário digitar
o
número 0 (zero) */
#include <stdio.h>
/* função
que imprime no arquivo */
void imprime(
FILE *arqsaida, int x ) {
fprintf( arqsaida, "%d\n", x );
}
int main() {
FILE
*arqsaida;
int numero;
/* abre
o arquivo para escrita */
arqsaida
= fopen( "saida.txt", "w" );
/* se
não conseguiu abrir o arquivo */
if (
arqsaida == NULL ) {
printf( "Não consegui abrir o arquivo.\n" );
return 0;
}
/* lê
o primeiro número */
printf(
"Digite um número (zero para finalizar): " );
scanf(
"%d", &numero );
/* enquanto
o numero digitado não for 0 */
while
( numero != 0 ) {
/* imprime o número no arquivo */
imprime( arqsaida, numero );
/* lê o próximo número */
printf( "Digite um número (zero para finalizar): " );
scanf( "%d", &numero );
}
/* fecha
o arquivo */
fclose(
arqsaida );
return
0;
}
Note que, nesse exemplo, a linha que imprime no arquivo foi colocada
numa função. Isso não é necessário;
o comando fprintf poderia estar na função main.
Entretanto, esse exemplo demonstra como a variável arqsaida
pode
ser passada como parâmetro de uma função.