Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用cin-C+的良好输入验证循环+; 我在第二个OOP课程中,我的第一堂课是用C语言教的,所以我是C++新手,现在我正在用CIN练习输入验证。所以我的问题是:_C++_Loops_Validation - Fatal编程技术网

使用cin-C+的良好输入验证循环+; 我在第二个OOP课程中,我的第一堂课是用C语言教的,所以我是C++新手,现在我正在用CIN练习输入验证。所以我的问题是:

使用cin-C+的良好输入验证循环+; 我在第二个OOP课程中,我的第一堂课是用C语言教的,所以我是C++新手,现在我正在用CIN练习输入验证。所以我的问题是:,c++,loops,validation,C++,Loops,Validation,我构建的这个循环是验证输入的一个很好的方法吗?还是有一种更为普遍/被接受的方法 谢谢 代码: int应纳税所得额; 整数误差; //输入验证循环 做 { 误差=0; 可征税收入; if(cin.fail()) { CUT< P>你可能不考虑尝试/捕捉,只是为了让你习惯于异常处理的概念? 如果不是,为什么不使用布尔值,而不是0和1?养成使用正确类型的变量的习惯(并在需要时创建类型) Cin.fail()也将在 事实上,在很多地方 你可能会研究其中的一些,并尝试遵循为什么事情应该以某种方式进行的解

我构建的这个循环是验证输入的一个很好的方法吗?还是有一种更为普遍/被接受的方法

谢谢

代码:

int应纳税所得额;
整数误差;
//输入验证循环
做
{
误差=0;
可征税收入;
if(cin.fail())
{

CUT< P>你可能不考虑尝试/捕捉,只是为了让你习惯于异常处理的概念?

如果不是,为什么不使用布尔值,而不是0和1?养成使用正确类型的变量的习惯(并在需要时创建类型)

Cin.fail()也将在

事实上,在很多地方

你可能会研究其中的一些,并尝试遵循为什么事情应该以某种方式进行的解释


但是,迟早,你应该理解异常…

我不太喜欢为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');
    }
}
int应纳税所得额;
对于(;;){
可征税收入){
打破
}否则{

cout一个小问题是,error helper变量是完全冗余的,不需要:

do
{
    cin.clear();
    cout << "Please enter in your taxable income: ";
    cin >> taxableIncome;
    if (cin.fail())
    {
        cout << "Please enter a valid integer" << endl;
        cin.ignore(80, '\n');
    }
}while(cin.fail());
do
{
cin.clear();
可征税收入;
if(cin.fail())
{
可征税收入;
字符串strInput=“”;
可征税收入)
打破

非常感谢,这是我一直在寻找的东西。非常感谢。但是有一个问题,for循环条件(;)是什么?我不明白。@Alex-
foo(;;)
意味着永远循环,就像
while(1)一样
。如果你不想让你的循环真正永远循环下去,你需要一个
中断
来终止循环。在这种情况下,我通常会使用while(!eof(stdin))来避免输入丢失时代码发疯……或者这会在这里引发异常吗?
do
{
    cin.clear();
    cout << "Please enter in your taxable income: ";
    cin >> taxableIncome;
    if (cin.fail())
    {
        cout << "Please enter a valid integer" << endl;
        cin.ignore(80, '\n');
    }
}while(cin.fail());
int taxableIncome;
string strInput = "";
cout << "Please enter in your taxable income:\n";

while (true) 
{
    getline(cin, strInput);

    // This code converts from string to number safely.
    stringstream myStream(strInput);
    if ( (myStream >> taxableIncome) )
        break;
    cout << "Invalid input, please try again" << endl;
}