Cómo leer Int desde un archivo en C++

Jinku Hu 12 octubre 2023
  1. Use el bucle while y el operador >> para leer Int desde el archivo en C++
  2. Usar el bucle while y el operador >> combinado con el método push_back para leer la int de un archivo
  3. No utilice el bucle while y el método eof() para leer el archivo Int
Cómo leer Int desde un archivo en C++

Este artículo explicará varios métodos de C++ sobre cómo leer los datos int de un archivo.

En los siguientes programas de ejemplo, asumimos que un archivo de texto se llama input.txt, que contiene números enteros separados por espacios en múltiples líneas. Observe que cada código de ejemplo comprueba si este nombre de archivo se asocia con el flujo de archivo real e imprime el correspondiente mensaje de error en caso de error.

  • Contenido del input.txt:
123 178 1289 39 90 89 267 909 23 154 377 34 974 322

Use el bucle while y el operador >> para leer Int desde el archivo en C++

Este método utiliza el bucle while para iterar el proceso hasta que se alcanza el EOF (final del archivo) y almacenar cada entero en la variable numérica. Entonces, podemos imprimir cada número para consolar en el cuerpo del bucle.

#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;

Usar el bucle while y el operador >> combinado con el método push_back para leer la int de un archivo

Como otra alternativa, podemos obtener cada entero del archivo, almacenarlo en la variable numérica como en el ejemplo anterior, y luego empujarlos al vector int en cada iteración. Note que este escenario incluye otro bucle for para imitar el sistema más práctico donde los elementos de los números vectoriales almacenados necesitan 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;

No utilice el bucle while y el método eof() para leer el archivo Int

Uno podría considerar el uso de la función eof() miembro como una condición de bucle while para abordar el mismo problema. Desafortunadamente, eso puede llevar a una iteración extra. Dado que la función eof() sólo devuelve true si el eofbit está establecido, podría llevar a la iteración donde se modifica uninitialized. Este escenario se demuestra con el siguiente ejemplo de código:

#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

Artículo relacionado - C++ File