如何让用户输入正双精度变量

How to make the user enter a positive double variable?

本文关键字:双精度 变量 输入 用户      更新时间:2023-10-16

我希望用户输入一个正双精度变量。如果他们输入其他任何内容,我希望程序循环并继续要求他们输入一个数字,而不是收到错误并关闭。我用条件语句和中断做了一个无限循环。出于某种原因,如果他们输入正数以外的内容,它会无限要求半径。有人可以帮助我吗?

for(;;) {
    cout << "Radius: ";
    cin >> radius;
    if(radius > 0){
        break;
    }
}

您可以简单地检查cin的流状态:

    double radius;
    for(;;) {
        cout<<"Radius: ";
        if(!(cin>>radius) || radius < 0.0) {
             cout << "Invalid input, please enter a positive double value." << endl;
             cin.clear();
             std::string dummy;
             cin >> dummy; // Read the left invalid input
        }
        else {
           break;
        }
    }

您需要清除流的错误标志,否则会继续循环,因为当流处于错误状态时不会再执行其他读取,并且radius在循环之前保留其值。您需要执行以下操作(必须#include <limits>):

if(!(cin >> radius)) // we didn't read a number, cin has a "bad" state
{
    cin.clear(); // clear the error flags
    cin.ignore(numeric_limits<streamsize>::max(), 'n'); // ignore the rest
    continue;
}