Comment lire Int à partir d'un fichier en C++
-
Utiliser la boucle
while
et l’opérateur>>
pour lire les int du fichier en C++ -
Utiliser la boucle
while
et l’opérateur>>
combiné avec la méthodepush_back
pour lire l’int du fichier -
N’utilisez pas la boucle
for
et la méthodeeof()
pour lire l’int du fichier
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;
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