Comment lire Int à partir d'un fichier en C++

Jinku Hu 12 octobre 2023
  1. Utiliser la boucle while et l’opérateur >> pour lire les int du fichier en C++
  2. Utiliser la boucle while et l’opérateur >> combiné avec la méthode push_back pour lire l’int du fichier
  3. N’utilisez pas la boucle for et la méthode eof() pour lire l’int du fichier
Comment lire Int à partir d'un fichier en C++

Cet article expliquera plusieurs méthodes C++ sur la façon de lire les données d’entrée d’un fichier.

Dans les exemples de programmes suivants, nous supposons qu’un fichier texte s’appelle input.txt, qui contient des nombres entiers séparés par des espaces sur plusieurs lignes. Notez que chaque exemple de code vérifie si ce nom de fichier est associé au flux de fichiers réel et imprime le message d’échec correspondant en cas d’erreur.

  • Contenu du fichier input.txt :
123 178 1289 39 90 89 267 909 23 154 377 34 974 322

Utiliser la boucle while et l’opérateur >> pour lire les int du fichier en C++

Cette méthode utilise la boucle while pour itérer le processus jusqu’à ce que l’EOF (fin du fichier) soit atteint et stocker chaque entier dans la variable nombre. Ensuite, nous pouvons imprimer chaque nombre à la console dans le corps de la boucle.

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

Production:

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

Utiliser la boucle while et l’opérateur >> combiné avec la méthode push_back pour lire l’int du fichier

Une autre possibilité consiste à obtenir chaque entier du fichier, à le stocker dans la variable numérique comme dans l’exemple précédent, puis à les pousser vers le vecteur int à chaque itération. Notez que ce scénario comprend une autre boucle for pour imiter le système plus pratique où les éléments des nombres vectoriels stockés doivent être manipulés.

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

Production:

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

N’utilisez pas la boucle for et la méthode eof() pour lire l’int du fichier

On pourrait envisager d’utiliser la fonction membre eof() comme une condition de boucle while pour aborder le même problème. Malheureusement, cela peut conduire à une itération supplémentaire. Puisque la fonction eof() ne retourne vrai que si le eofbit est défini, elle peut conduire à l’itération où le non initialisé est modifié. Ce scénario est démontré par l’exemple de code ci-dessous :

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

Production:

123; 178; 1289; 39; 90; 89; 267; 909; 23; 154; 377; 34; 974; 322;
Auteur: 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

Article connexe - C++ File