Ler Int a partir de um ficheiro em C++

Jinku Hu 12 outubro 2023
  1. Use while Loop e >> Operator para ler int do arquivo em C++
  2. Use o loop while e o método >> Operator combinado com o método push_back para ler o int do arquivo
  3. Não utilizar while Loop e eof() Método de leitura interna a partir de ficheiro
Ler Int a partir de um ficheiro em C++

Este artigo explicará vários métodos C++ sobre como ler os dados int a partir de um ficheiro.

Nos programas de exemplo seguintes, assumimos que um ficheiro de texto é chamado input.txt, que contém números inteiros separados por espaço em múltiplas linhas. Note-se que cada código de amostra verifica se este nome de ficheiro é associado ao fluxo de ficheiro real e imprime a mensagem de falha correspondente em caso de erro.

  • Conteúdo do ficheiro input.txt:
123 178 1289 39 90 89 267 909 23 154 377 34 974 322

Use while Loop e >> Operator para ler int do arquivo em C++

Este método utiliza o while para iterar o processo até que o EOF (fim do ficheiro) seja alcançado e armazenar cada número inteiro na variável número. Depois, podemos imprimir cada número para consolar no corpo do laço.

#include <fstream>
#include <iostream>

using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;

int main() {
  string filename("input.txt");
  int number;

  ifstream input_file(filename);
  if (!input_file.is_open()) {
    cerr << "Could not open the file - '" << filename << "'" << endl;
    return EXIT_FAILURE;
  }

  while (input_file >> number) {
    cout << number << "; ";
  }
  cout << endl;
  input_file.close();

  return EXIT_SUCCESS;
}

Resultado:

123; 178; 1289; 39; 90; 89; 267; 909; 23; 154; 377; 34; 974; 322;

Use o loop while e o método >> Operator combinado com o método push_back para ler o int do arquivo

Como outra alternativa, podemos obter cada número inteiro do ficheiro, armazená-lo na variável número como no exemplo anterior, e depois empurrá-lo para o vector int em cada iteração. Note-se que este cenário inclui outro cicli for para imitar o sistema mais prático onde os elementos dos números vectoriais armazenados precisam de ser manipulados.

#include <fstream>
#include <iostream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;

int main() {
  string filename("input.txt");
  vector<int> numbers;
  int number;

  ifstream input_file(filename);
  if (!input_file.is_open()) {
    cerr << "Could not open the file - '" << filename << "'" << endl;
    return EXIT_FAILURE;
  }

  while (input_file >> number) {
    numbers.push_back(number);
  }

  for (const auto &i : numbers) {
    cout << i << "; ";
  }
  cout << endl;
  input_file.close();

  return EXIT_SUCCESS;
}

Resultado:

123; 178; 1289; 39; 90; 89; 267; 909; 23; 154; 377; 34; 974; 322;

Não utilizar while Loop e eof() Método de leitura interna a partir de ficheiro

Poder-se-ia considerar a utilização da função de membro eof() como condição de loop while para abordar o mesmo problema. Infelizmente, isso pode levar a uma iteração extra. Uma vez que a função eof() só retorna verdadeiro se o eofbit estiver definido, pode levar à iteração onde a não-inicialização é modificada. Este cenário é demonstrado pela amostra de código abaixo:

#include <fstream>
#include <iostream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;

int main() {
  string filename("input.txt");
  vector<int> numbers;

  ifstream input_file(filename);
  if (!input_file.is_open()) {
    cerr << "Could not open the file - '" << filename << "'" << endl;
    return EXIT_FAILURE;
  }

  while (!input_file.eof()) {
    int tmp;
    input_file >> tmp;
    numbers.push_back(tmp);
  }

  for (const auto &i : numbers) {
    cout << i << "; ";
  }
  cout << endl;
  input_file.close();

  return EXIT_SUCCESS;
}

Resultado:

123; 178; 1289; 39; 90; 89; 267; 909; 23; 154; 377; 34; 974; 322;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ File