0

入力ファイルから印刷しようとしていますが、その時点では 1 セットのエントリしかありませんが、印刷しようとすると 2 回表示され、理由がわかりません。どんな助けでも大歓迎です。コードはこちら

ifstream orders;    
int idNum = 0;
int quantity = 0;
double totalCost = 0;

orders.open("processedOrders.dat");
if (orders.is_open())
{
cout << "Order Number" << setw(16) << "Quantity" << setw(22) << "Total Cost" << endl;
    while (!orders.eof())
    {
        orders >> idNum >> quantity >> totalCost;
        cout << "  " << idNum << setw(18) << quantity << setw(23) << totalCost << endl;
    }
        orders.close();
}
4

1 に答える 1

3

EOF マークがまだ読み取られていないため、次の反復が必要になるため、最後の行が 2 回表示されます。

次のように、ループ内のEOFを確認してください:-

if (orders.is_open())
{
cout << "Order Number" << setw(16) << "Quantity" << setw(22) << "Total Cost" << endl;
    while (true)
    {
        orders >> idNum >> quantity >> totalCost;
        if( orders.eof() ) break;
        cout << "  " << idNum << setw(18) << quantity << setw(23) << totalCost << endl;
    }
        orders.close();
}

以下でも、期待される結果が得られるはずです。

if (orders.is_open())
 while (orders >> idNum >> quantity >> totalCost) 
   cout << "  " << idNum << setw(18) << quantity << setw(23) << totalCost << endl;
于 2013-08-03T08:56:11.393 に答える