J'ai des problèmes pour afficher la sortie. Il y a toujours et une ligne supplémentaire est imprimée. J'ai fait quelques recherches et il s'avère que c'est parce que mon getline. De plus, je présente mes excuses pour le formatBesoin d'aide pour utiliser getline dans un fichier
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct menuItemType
{
string menuItem;
double menuPrice;
};
int main()
{
menuItemType plainEgg;
menuItemType baconEgg;
menuItemType muffin;
menuItemType frenchToast;
menuItemType fruitBasket;
menuItemType cereal;
menuItemType coffee;
menuItemType tea;
ifstream infile;
infile.open("Ch9_Ex5Data.txt");
while(infile)
{
getline(infile,plainEgg.menuItem);
infile >> plainEgg.menuPrice;
getline(infile,baconEgg.menuItem);
infile >> baconEgg.menuPrice;
getline(infile,muffin.menuItem);
infile >> muffin.menuPrice;
getline(infile,frenchToast.menuItem);
infile >> frenchToast.menuPrice;
getline(infile,fruitBasket.menuItem);
infile >> fruitBasket.menuPrice;
getline(infile,cereal.menuItem);
infile >> cereal.menuPrice;
getline(infile,coffee.menuItem);
infile >> coffee.menuPrice;
getline(infile,tea.menuItem);
infile >> tea.menuPrice;
cout << plainEgg.menuItem << plainEgg.menuPrice << endl;
cout << baconEgg.menuItem << baconEgg.menuPrice << endl;
cout << muffin.menuItem << muffin.menuPrice << endl;
cout << frenchToast.menuItem << frenchToast.menuPrice << endl;
cout << fruitBasket.menuItem << fruitBasket.menuPrice << endl;
cout << cereal.menuItem << cereal.menuPrice << endl;
cout << coffee.menuItem << coffee.menuPrice << endl;
cout << tea.menuItem << tea.menuPrice << endl;
}
infile.close();
return 0;
}
Contenu dans le fichier
Plain Eggs
1.45
Bacon and Eggs
2.45
etc.
J'ai essayé d'utiliser
if (infile.eof())
cout << endl;
c'est ma sortie
Plain Egg1.45 // <-- this is the only correct output
Bacon
and Egg2.45
Muffin
0.99
French
Toast1.99
Fruit
Basket2.49
Cereal
0.69
Coffee
0.50
Tea
0.75
chose seulement qui a imprimé correctement était le premier ligne. (Note) Je dois utiliser la structure.
Tester les erreurs lors de la lecture, pas une fois avant d'avoir lu 16 fois si toutes ces erreurs pouvaient échouer. Vous allez aussi avoir du mal à mélanger getline et '>>' sans que certains ignorent pour manger les nouvelles lignes restantes. Puisque votre prix est une chaîne, vous pourriez aussi bien lire toute la ligne et vous simplifier la vie. Vous pourriez aussi penser à un tableau. –
Vous ne pouvez pas utiliser eof() après getline parce que c'est la fin du fichier. Vous devriez probablement vérifier EOL ou utiliser un \ n comme un délimiteur dans getline() et utiliser get line() au lieu de >> –
Ceci est une bonne lecture sur le mélange 'getline' et' >> '. https://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction –