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 fopen com modo "w" e depois "r".
  • Verificar se fopen retornou NULL e imprimir mensagem de erro.
  • Usar fprintf para escrever e fscanf para ler.
  • Fechar o arquivo com fclose apó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

  1. Abrimos o arquivo numero.txt no modo "w" (escrita) com fopen. Se falhar, perror imprime o erro e saímos.
  2. Usamos fprintf para escrever o inteiro 42 no arquivo.
  3. Fechamos o arquivo com fclose para garantir que os dados sejam gravados.
  4. Reabrimos o mesmo arquivo no modo "r" (leitura) e verificamos novamente se fopen retornou NULL.
  5. Declaramos a variável valor e usamos fscanf para ler um inteiro. O retorno deve ser 1; caso contrário, tratamos o erro.
  6. 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á usar fp nulo e travará. Corrija sempre com if (fp == NULL) { ... }.
  • Não fechar o arquivo: os dados podem não ser gravados imediatamente. Use fclose.
  • Usar fscanf sem verificar o retorno: se o arquivo estiver vazio ou com formato errado, valor fica 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