Fácil C

Verificando abertura de arquivo

Enunciado

Escreva um programa que tente abrir o arquivo dados.txt para leitura. Se a abertura falhar, use perror para mostrar o erro e retorne EXIT_FAILURE. Se abrir com sucesso, feche o arquivo e retorne EXIT_SUCCESS.

Requisitos

  • Usar fopen com modo "r".
  • Verificar se o retorno é NULL e chamar perror.
  • Fechar o arquivo com fclose em caso de sucesso.
  • Retornar EXIT_FAILURE ou EXIT_SUCCESS conforme o caso.

Código inicial

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    // seu código aqui
    return 0;
}

Saída esperada

Erro ao abrir arquivo: No such file or directory
Ver dica

Use perror("Erro ao abrir arquivo") para imprimir a mensagem do sistema.

Mostrar solução
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    FILE *fp = fopen("dados.txt", "r"); // tenta abrir para leitura
    if (fp == NULL) {
        perror("Erro ao abrir arquivo"); // imprime mensagem do errno
        return EXIT_FAILURE;
    }
    fclose(fp); // fecha se abriu
    return EXIT_SUCCESS;
}

Passo a passo

  1. fopen("dados.txt", "r") tenta abrir o arquivo em modo leitura. Se não existir, retorna NULL.
  2. Comparamos fp == NULL para detectar a falha. Essa é a verificação obrigatória.
  3. perror("Erro ao abrir arquivo") imprime a mensagem passada seguida de : e a descrição do erro armazenado em errno.
  4. Retornamos EXIT_FAILURE para indicar ao sistema operacional que o programa terminou com erro.
  5. Se fp não for NULL, fechamos o arquivo com fclose e retornamos EXIT_SUCCESS.

Por que funciona

fopen retorna NULL em caso de falha e define errno com o motivo (por exemplo, ENOENT). perror traduz esse código para uma mensagem legível. O retorno EXIT_FAILURE permite que scripts e o shell saibam que algo deu errado.

Erros comuns

  • Esquecer de verificar fp == NULL e usar o arquivo depois: fprintf(fp, ...) causa segmentation fault.
  • Usar perror sem que errno esteja definido: se você não chamou uma função que falhou, a mensagem pode ser enganosa.
  • Não fechar o arquivo: vazamento de descritor, embora o sistema feche ao encerrar.

Outra forma de resolver

Usar fprintf(stderr, "Erro: %s\n", strerror(errno)) em vez de perror. É preferível quando você quer formatar a mensagem de forma personalizada.

Saída esperada

Erro ao abrir arquivo: No such file or directory