0

旅行中の車の平均速度を計算するプログラムを作成する必要があり、ユーザーに旅行中の 2 つの都市の名前を入力させる必要がありました。そのプログラムは機能しましたが、次に作成しなければならなかったプログラムは、最後のプログラムの追加であり、ユーザーはプログラムを何回実行するかを尋ねられます。ユーザーがプログラムを実行する必要がある回数の新しい変数を宣言しました。ただし、プログラムがループに入ると、最初の getline() メソッド (出発地の都市を尋ねる) をスキップし、2 番目の getline() メソッド (目的地の都市を尋ねるメソッド) に直接スキップします。バッファをクリアしてループを別の方法で宣言しようとしましたが、何をしても文字列は空の文字列としてプログラムに読み込まれます。何かを間違えたのか、このインスタンスで getline() を使用できないのか疑問に思っています。

GNU Compiler で C++ および Codeblocks IDE を使用する (他のコンパイラも試しました)

とにかくここにコードがあります。

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    //Declare Variables
    string orgcity = "";
    string destcity = "";
    int hours = 0;
    double minutes = 0.0;
    int hoursmin = 0;
    int minutesmin = 0;
    int minutesmax = 60;
    double dist = 0.0;
    double totalhours = 0.0;
    double avespeed = 0.0;
    double num1 = 0;

    cout << "How many times would you like to calculate the average speed: ";
    cin >> num1;

    for(num1; num1 > 0; --num1)
    {

    //Collect Data
    cout << "Enter the city of origin: ";
    getline(cin, orgcity);

    cout << "Enter the destination city: ";
    getline(cin, destcity);

    //If Statements and Loops...Start here
    do {
        cout << "Enter the number of hours spent in travel: ";
        cin >> hours;

        if (hours < hoursmin)
            cout << "     Invalid number of hours - must be >= 0" << endl;

    } while (hours < hoursmin);

    do {
    cout << "Enter the number of minutes spent in travel: ";
    cin >> minutes;

    if (minutes >= minutesmax){
    cout <<"     Invalid number of minutes - must be in range 0..59" << endl;
    }
    if (minutes <= minutesmin) {
        cout << "     Invalid number of minutes - must be in range 0..59" << endl;
    }
    } while (minutes >= minutesmax);

    //End Here

    cout << "Enter the distance (in miles) between the two cities: ";
    cin >> dist;
    cout << endl;

    //Formula and Final Prompt
    totalhours = (hours + (minutes / 60.0));
    avespeed = dist / totalhours;

    cout << "The average speed of the vehicle traveling" << endl;
    cout << "between " << orgcity << " and " << destcity << " is " << fixed << setprecision(2) << avespeed << " miles per hour." << endl;
    cout << "-------------------------------------------------------------------------------" << endl;
    }
    return 0;

}
4

1 に答える 1

0

ループを実行する回数を読み取ると、入力演算子は数値を読み取りますが、改行はバッファーに残します。これは、 への最初の呼び出しがgetlineその単一の改行のみを読み取ることを意味します。

その番号以降の改行までを確実にスキップするには、次のように使用できます。

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
于 2013-09-30T05:15:03.603 に答える