Cómo leer Int desde un archivo en C++
-
Use el bucle
while
y el operador>>
para leer Int desde el archivo en C++ -
Usar el bucle
while
y el operador>>
combinado con el métodopush_back
para leer la int de un archivo -
No utilice el bucle
while
y el métodoeof()
para leer el archivo Int
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;
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