出力を表示する際に問題が発生しました。常に印刷されている余分な行があります。私はいくつかの研究を行い、それは私のgetlineのためにそれが判明します。また、私はフォーマットのために、私は、これは正しく印刷私の出力ファイル内でgetlineを使用する際の助けが必要です
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
唯一のものです
if (infile.eof())
cout << endl;
を使用してみましたファイル内の
#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;
}
内容
Plain Eggs
1.45
Bacon and Eggs
2.45
etc.
を謝罪します非常に最初だったライン。 (注)構造を使わなければならない。
読み込み時のエラーをテストします.1度読み込む前にすべてのエラーが発生する可能性があります。また、残った改行を食べるためにいくつかの無視しないでgetlineと '>'を混在させることにいくつかの問題があるでしょう。あなたの価格は文字列なので、行全体を読み、あなたの人生を単純化するかもしれません。配列について考えることもできます。 –
ファイルの終わりであるgetlineの後にeof()を使用することはできません。おそらく、EOLを調べるか、\ nをgetline()でデリミタとして使用し、>> –
の代わりにget line()を使うべきです。これは、 'getline'と' >> 'を混ぜることに関する良い読書です。 https://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction –