2

C++ の練習をしていると、本のコードに出くわしました。ブレーク シームを使用した if ステートメントの使用法は、私には少し不必要です。

if (!(cin >> dstep)) ブレーク;

これは私には少しハックなようで、単純に cin >> dstep を if または break なしで使用すると、プログラムが正常に実行されます。何かご意見は?

                    int main()
                {
                    using namespace VECTOR;

                    srand(time(0));     //seed random-number generator
                    double direction;
                    Vector step;        //creates default object
                    Vector result(0.0, 0.0);    //
                    unsigned long steps = 0;
                    double target;
                    double dstep;

                    cout << "Enter target distance (q to quit): ";

                    while (cin >> target)
                    {
                        cout << "Enter step length: ";
                        if (!(cin >> dstep))    //if NOT inputing into dstep THEN break/means if INPUTING is TRUE, keep going and don't break out of loop
                            break; 
                      //cin >> dstep  // why not just use this?
                        while (result.magval() < target)
                        {
                            direction = rand() % 360;
                            step.set(dstep, direction, 'p'); //sets the values dstep and direction based on the form; in this case 'p'
                            result = result + step;
                            steps++;
                        }
                        cout << "After " << steps << " steps, the subject "
                            "has the following location:\n";
                        cout << result << endl;
                        result.polar_mode();
                        cout << " or\n" << result << endl;
                        cout << "Average outward distance per step = "
                            << result.magval() / steps << endl;
                        steps = 0;
                        result.set(0.0, 0.0);
                        cout << "Enter target distance (q to quit): ";
                    }
                    cout << "Bye!\n";

                    cin.get();
                    return 0;
                }
4

1 に答える 1

3

例外を有効にするか、すべてのストリーム入力操作をチェックする必要があります。そうしないと、入力の形式が正しくない場合に、無限ループに陥ったり、間違った結果が得られたりする危険があります。

于 2012-05-16T03:41:37.143 に答える