4

私は現在、「C++ Primer Plus」という本に取り組んでおり、プログラミングの演習を行っています。どうやら、次のコードが動作するはずの方法で動作しないため、Xcode(4.3.3) で問題が発生しています。

  #include <iostream>
    #include <string>

    struct car 
    {
        std::string maker;
        int year;
    };



int main() 
{
    using namespace std;

    cout << "How many cars do you wish to catalog? ";
    int nCars;
    (cin >> nCars).get();

    car* aCars = new car[nCars];

    for (int i = 0; i < nCars; i++) 
    {
        cout << "\nCar #" << (i + 1) << endl;
        cout << "Please enter the make: ";
        getline (cin, (aCars + i)->maker);
        cout << "\nPlease enter the year made: ";
        (cin >> (aCars + i)->year).get();
    }
    cout << "Here is your collection: \n";

    for (int i = 0; i < nCars; i++)
    {
        cout << (aCars + i)->year << " " << (aCars + i)->maker << endl;
    }

    delete [] aCars;
    return 0;
}

問題は、どのメーカーにも入る機会がないことです。「(cin >> nCars).get();」を使用しているにもかかわらず、プログラムは年を入力する必要があるポイントに直接進みます。改行文字を取り除く。

私は何かを見落としていますか?

前もって感謝します!

4

2 に答える 2

0

I suspect that you may be running on windows and the two-byte newlines are hitting you. You may be able to improve things (for lines that aren't ridiculously long) with ignore:

cin >> nCars;
cin.ignore(1024, '\n');

Note that since you rely on stream numeric processing, entering a non-numeric year such as QQ will result in the programming just finishing without asking for any more input.

You don't need to do math on the years so treat them as strings instead of integers. Then if you need to you can do validation of each year after you get the input.

于 2012-08-29T15:59:00.660 に答える
0

わかりました、みんな..私は問題を見つけました。cin.get() を使用すると、Xcode 内のコンソールが期待どおりに機能しません。ターミナルと Visual Studio (Win 7) で同じコードを試してみましたが、プログラムは完全に動作します。

とにかく、皆さんのアドバイスに感謝します。次回はそちらを検討してみたいと思います。:)

乾杯!

于 2012-08-29T16:52:36.257 に答える