1. ホーム
  2. c++

[解決済み] cinを使った良い入力検証ループ - C++

2022-03-12 08:48:48

質問

OOPの授業は2回目で、最初の授業はC#で教わったので、C++は初めてで、現在cinを使って入力検証を練習しています。そこで質問です。

私が作ったこのループは、入力を検証するためのかなり良い方法なのでしょうか?それとも、もっと一般的な、あるいは認められたやり方があるのでしょうか?

ありがとうございます。

コード

int taxableIncome;
int error;

// input validation loop
do
{
    error = 0;
    cout << "Please enter in your taxable income: ";
    cin >> taxableIncome;
    if (cin.fail())
    {
        cout << "Please enter a valid integer" << endl;
        error = 1;
        cin.clear();
        cin.ignore(80, '\n');
    }
}while(error == 1);

解決方法は?

私は、iostreamsの例外処理をオンにするのはあまり好きではありません。 I/Oエラーは、エラーがしばしば非常に起こりやすいという点で、十分に例外的ではありません。 私は、それほど頻繁ではないエラー状態に対してのみ例外を使用することを好みます。

コードは悪くないのですが、80文字をスキップするのはちょっと恣意的ですし、ループをいじればエラー変数は不要です(本来は bool ということです。) から読み込んだものを cin を直接 if というのは、どちらかというとPerlのイディオムかもしれません。

以下は私の見解です。

int taxableIncome;

for (;;) {
    cout << "Please enter in your taxable income: ";
    if (cin >> taxableIncome) {
        break;
    } else {
        cout << "Please enter a valid integer" << endl;
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
}

80文字しかスキップできないことを除けば、これらは些細なことであり、むしろ好みのスタイルの問題である。