Fácil C
Escrevendo e lendo um número
Enunciado
Crie um programa que abra o arquivo numero.txt para escrita, grave o número inteiro 42 usando fprintf, feche o arquivo. Em seguida, abra o mesmo arquivo para leitura, leia o número com fscanf e imprima na tela. Trate possíveis erros de abertura.
Requisitos
- Usar
fopencom modo"w"e depois"r". - Verificar se
fopenretornouNULLe imprimir mensagem de erro. - Usar
fprintfpara escrever efscanfpara ler. - Fechar o arquivo com
fcloseapós cada operação.
Código inicial
#include <stdio.h>
#include <stdlib.h>
int main(void) {
// Seu código aqui
return 0;
}
Saída esperada
Valor lido: 42
Ver dica
Lembre-se de que fscanf retorna o número de itens lidos com sucesso. Verifique se retornou 1.
Mostrar solução
#include <stdio.h>
#include <stdlib.h>
int main(void) {
// Abre para escrita
FILE *fp = fopen("numero.txt", "w");
if (fp == NULL) {
perror("Erro ao abrir para escrita");
return 1;
}
fprintf(fp, "%d", 42); // grava o número
fclose(fp);
// Abre para leitura
fp = fopen("numero.txt", "r");
if (fp == NULL) {
perror("Erro ao abrir para leitura");
return 1;
}
int valor;
if (fscanf(fp, "%d", &valor) != 1) {
fprintf(stderr, "Erro na leitura\n");
fclose(fp);
return 1;
}
printf("Valor lido: %d\n", valor);
fclose(fp);
return 0;
}
Passo a passo
- Abrimos o arquivo
numero.txtno modo"w"(escrita) comfopen. Se falhar,perrorimprime o erro e saímos. - Usamos
fprintfpara escrever o inteiro 42 no arquivo. - Fechamos o arquivo com
fclosepara garantir que os dados sejam gravados. - Reabrimos o mesmo arquivo no modo
"r"(leitura) e verificamos novamente sefopenretornouNULL. - Declaramos a variável
valore usamosfscanfpara ler um inteiro. O retorno deve ser 1; caso contrário, tratamos o erro. - Imprimimos o valor lido e fechamos o arquivo.
Por que funciona
O modo "w" cria ou trunca o arquivo, permitindo escrita. Após fclose, os dados são efetivados. O modo "r" abre para leitura. fprintf e fscanf são as versões de printf/scanf para arquivos, usando a mesma sintaxe de formatação. Verificar os retornos garante que erros não passem despercebidos.
Erros comuns
- Esquecer de verificar
fopen: se o arquivo não puder ser criado (ex.: permissão negada), o programa tentará usarfpnulo e travará. Corrija sempre comif (fp == NULL) { ... }. - Não fechar o arquivo: os dados podem não ser gravados imediatamente. Use
fclose. - Usar
fscanfsem verificar o retorno: se o arquivo estiver vazio ou com formato errado,valorfica indefinido. Compare o retorno com o número de itens esperados.
Outra forma de resolver
Poderia usar fgets e sscanf para ler a linha inteira e depois extrair o número. Isso é útil quando o formato é mais complexo ou se deseja validar a linha completa.
Saída esperada
Valor lido: 42