Questão de Programação — Linguagens de programação — Quadrix 2025
- Código
- qg594697
- Banca
- Quadrix
- Órgão
- CFBio
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Desenvolvimento
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: E — ERRADO. A afirmação está incorreta porque feof() é uma função da biblioteca padrão da linguagem C (declarada em <stdio.h>), utilizada para verificar se o fim do arquivo foi atingido — e não um método da classe ifstream, que pertence à C++ e tem como função fechar um arquivo. A banca misturou três conceitos distintos: a linguagem (C × C++), o tipo de elemento (função × método) e a finalidade (verificar fim de arquivo × fechar arquivo).
A linguagem C é uma linguagem estruturada e procedural, criada por Dennis Ritchie na década de 1970. Ela não possui classes, objetos ou métodos — esses conceitos pertencem ao paradigma de programação orientada a objetos, que foi incorporado à linguagem C++ (criada por Bjarne Stroustrup como uma extensão da C). Em C, o trabalho com arquivos é feito por meio de funções da biblioteca padrão, como fopen(), fclose(), fread(), fwrite(), fprintf(), fscanf() e feof(). Todas essas são funções livres, não métodos de nenhuma classe.
Já em C++, o trabalho com arquivos pode ser feito tanto pelas funções da biblioteca C (por compatibilidade) quanto pelas classes da biblioteca padrão de streams: ifstream (input file stream, para leitura), ofstream (output file stream, para escrita) e fstream (para leitura e escrita). Essas classes possuem métodos como open(), close(), read(), write(), eof(), entre outros. O método que fecha um arquivo em C++ é o close(), e o que verifica o fim do arquivo é o eof(). Note que feof() é uma função da C, enquanto eof() é um método da C++ — a semelhança dos nomes é uma armadilha clássica.
Vamos a um exemplo prático para fixar. Em C, para ler um arquivo até o fim, escrevemos:
#include <stdio.h>
int main() {
FILE *fp = fopen("dados.txt", "r");
if (fp == NULL) {
printf("Erro ao abrir o arquivo\n");
return 1;
}
char c;
while (!feof(fp)) { // função da C: verifica fim do arquivo
c = fgetc(fp);
if (c != EOF) putchar(c);
}
fclose(fp); // função da C: fecha o arquivo
return 0;
}Em C++, o equivalente seria:
#include <fstream>
#include <iostream>
int main() {
std::ifstream arquivo("dados.txt");
if (!arquivo.is_open()) {
std::cerr << "Erro ao abrir o arquivo\n";
return 1;
}
char c;
while (arquivo.get(c)) { // lê até o fim
std::cout << c;
}
arquivo.close(); // método da classe ifstream: fecha o arquivo
return 0;
}Perceba a diferença: em C, feof() é uma função que verifica se o fim do arquivo foi atingido; em C++, close() é um método da classe ifstream que fecha o arquivo. A afirmação do enunciado mistura tudo: diz que feof() é um método da classe ifstream (errado, é função da C) e que tem como função fechar um arquivo (errado, verifica fim de arquivo).
A pegadinha da banca é explorar a semelhança entre feof() (C) e eof() (C++), além de confundir função com método e verificação de fim de arquivo com fechamento. Para não cair, o candidato deve lembrar que:
C é procedural: usa funções como feof(), fclose().
C++ é orientada a objetos: usa classes como ifstream e métodos como eof(), close().
feof() verifica fim de arquivo; close() fecha o arquivo.
A banca troca a linguagem (C por C++), o tipo de elemento (função por método) e a finalidade (verificar fim de arquivo por fechar arquivo). O candidato que conhece superficialmente feof() pode até saber que ela tem a ver com arquivos, mas não percebe que ela é da C, não da C++, e que não fecha nada. Lembre-se: feof() = função da C para verificar fim de arquivo; close() = método da C++ para fechar arquivo.
A afirmação está errada por três motivos: (1) feof() é uma função da biblioteca padrão da linguagem C, não um método da classe ifstream (que é da C++); (2) a função de feof() é verificar se o fim do arquivo foi atingido, não fechar o arquivo; (3) o fechamento de arquivo em C é feito pela função fclose(), e em C++ pelo método close(). Portanto, a assertiva está incorreta.
Gabarito: E — ERRADO.
Link permanente: /questoes/qg594697