4

たとえば、「2a」と入力すると、エラーは表示されず、ユーザーに値の再入力を求めるメッセージも表示されません。どうすればこれを修正できますか?

while (std::cin.fail())
{ 
    std::cout << "ERROR, enter a number" << std::endl;
    std::cin.clear();
    std::cin.ignore(256,'\n');
    std::cin >> dblMarkOne;
}
std::cout << "" << std::endl;
4

2 に答える 2

0

1 つの方法は、isDigit() 関数を使用することです。

ASCII の数値である文字には 1 を返し、それ以外の場合は 0 を返します。

使用方法は、1 桁を期待してそれをチェックするだけか、より長い数字が必要かによって異なります。

数字以外の文字が出現するまでに出現する数字の文字を抽出する場合は、それを char[] または std::string に格納してから、不要な文字を破棄するか、最初に終了するかのいずれかで、各文字を反復処理します。他のキャラクター。

1桁しかない場合は、ループを次のように変更します。

std::cin >> dblMarkOne;

while (!isDigit(dblMarkOne)) {
    std::cout << "ERROR, enter a number" << std::endl;
    std::cin.clear();
    std::cin.ignore(256,'\n');
    std::cin >> dblMarkOne;
}

1 桁より長い数値が必要な場合は、std::string を作成して入力を保持し、早期に中断するかどうかに基づいてその内容を反復処理し、出力を変数に保存します。

于 2013-09-12T15:17:29.980 に答える