0

メーカー、レンタル日数、走行距離に基づいてレンタカー料金を計算する宿題用のプログラムを作成しています。全体として、プログラムは機能しますが、ユーザーが計算する自動車の台数を求められた場合、プログラムは台数を超えた後もユーザーに入力を求め続けます。また、マイルの形式は、最初に入力した車両では正しいですが、それ以降の入力では変更されます。

これらの 2 つの問題に関するヘルプをいただければ幸いです。

コード:

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    // Change the console's background color.
    system ("color F0");

    // Declare the variables.
    char carType;
    string brand, f("Ford"), c("Chevrolet");
    int counter = 0, cars = 0;
    double days, miles, cost_Day, cost_Miles, day_Total;

    cout << "Enter the number of cars you wish to enter: ";
    cin >> cars;
    cin.ignore();

    while (counter <= cars)
    {

        cout << "Enter the car type (F or C): ";
        cin >> carType;
        cin.ignore();
        cout << "Enter the number of days rented: ";
        cin >> days;
        cin.ignore();
        cout << "Enter the number of miles driven: ";
        cin >> miles;
        cin.ignore();


        if (carType == 'F' || carType == 'f')
        {
            cost_Day = days * 40;
            cost_Miles = miles * .35;
            day_Total = cost_Miles + cost_Day;
            brand = f;
        }
        else
        {
            cost_Day = days * 35;
            cost_Miles = miles * .29;
            day_Total = cost_Miles + cost_Day;
            brand = c;
        }

        cout << "\nCar            Days   Miles        Cost\n";
        cout << left << setw(12) << brand << right << setw(6) << days << right << setw(8) << miles 
        << fixed << showpoint << setprecision (2) << setw(8) << right << "$" << day_Total << "\n\n";
        counter++;
    }


        system ("pause");
}
4

2 に答える 2

3

あなたは0から数え始めましたint counter = 0, cars = 0;

次に、入力した数と等しくなるまで数えます ( の「または等しい」ビットwhile (counter <= cars))。

実際の例として、3 つのエントリが必要な場合:

Start: counter = 0, cars = 3.
0 <= 3: true
End of first iteration: counter = 1
1 <= 3: true
End of second iteration: counter = 2
2 <= 3: true
End of third iteration: counter = 3
3 <= 3: true (the "or equal" part of this)
End of FORTH iteration: counter = 4
4 <= 3: false -> Stop

3 回ではなく 4 回の反復を完了しました。「厳密に以下」( counter < cars) のみをチェックした場合、3 回目の反復の最後の条件は false になり、そこで終了していたはずです。

于 2013-03-20T18:24:58.267 に答える
1

while ループの見出しは次のようになります。

while(counter < cars)

それよりも

while(counter <= cars)
于 2013-03-20T18:25:08.000 に答える