Je veux juste lire un fichier texte et stocker les données dans un vecteur. Ainsi, le poids de la valeur doit être la somme jusqu'à ce que la limite soit atteinte. Les quatre premières lignes seront lues correctement mais les suivantes ne seront pas lues. Quelle est l'erreur?Mauvaise lecture du fichier texte en C++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <limits>
/*
Data.txt
John
6543
23
Max
342
2
A Team
5645
23
*/
struct entry
{
// passengers data
std::string name;
int weight; // kg
std::string group_code;
};
void reservations()
{
std::ofstream file;
file.clear();
file.open("reservations.txt");
file.close();
}
entry read_passenger(std::ifstream &stream_in)
{
entry passenger;
if (stream_in)
{
std::getline(stream_in, passenger.name);
stream_in >> passenger.weight;
std::getline(stream_in, passenger.group_code);
stream_in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return passenger;
}
return passenger;
}
int main(void)
{
std::ifstream stream_in("data.txt");
std::vector<entry> v; // contains the passengers data
const int limit_total_weight = 10000; // kg
int total_weight = 0; // kg
entry current;
while (!stream_in.eof())
{
current = read_passenger(stream_in);
total_weight = total_weight + current.weight;
std::cout << current.name << std::endl;
if (total_weight >= limit_total_weight)
{
break;
}
}
return 0;
}
Ce que vous dites est presque correct, mais vous devez placer l'ignorer aussi après la « passenger.groupcode » pour sauter le newline séparant les entrées. –
oh il y a des lignes vides. À ce moment-là, ignorer est un moyen de les gérer. –
Clement Bellot: alors ça marche !! Merci – burner007