C ++:如果用户输入的数字错误,则要求用户输入新号码

时间:2016-03-13 03:32:27

标签: c++ if-statement for-loop

如果用户输入的数字不遵循if语句中定义的函数,我试图让程序再次循环,最多三次。代码原样,只循环一次然后退出。我是否错误地键入了for循环,或者if...else语句错误了吗?

#include <iostream>

using std::cout; using std::cin; using std::endl;

int main() {
    cout << "Enter a positive odd number less than 40: ";
    int num = 0;


    for (int a = 0; a < 3; ++a);
    cin >> num;
    {   
        if (num < 40 && num > 0 && num % 2 == 1)
        {
            cout << "Thank you!" << endl;
        }
        else cout << "That is incorrect, try again!" << endl;
    }
}

2 个答案:

答案 0 :(得分:5)

  

我是否错误地输入了for循环,还是if _ else语句错了?

两者。您应该(1)删除for声明后面的分号; (2)将cin >> num移入for循环体; (3)在break;内添加if

for (int a = 0; a < 3; ++a)
{   
    cin >> num;
    if (num < 40 && num > 0 && num % 2 == 1)
    {
        cout << "Thank you!" << endl;
        break;
    }
    else cout << "That is incorrect, try again!" << endl;
}

BTW1:尝试使用调试器,然后你会发现事实上发生了什么。

BTW2:cin >> num失败时代码将失败(例如,用户输入的值无效),您可能需要检查cin >> num的结果,以处理案例。如:

for (int a = 0; a < 3; ++a)
{   
    if (cin >> num) 
    {
        if (num < 40 && num > 0 && num % 2 == 1)
        {
            cout << "Thank you!" << endl;
            break;
        }
        else cout << "That is incorrect, try again!" << endl;
    }
    else 
    {
        cin.clear(); // unset failbit
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // skip bad input
        cout << "Wrong input, try again!" << endl;
    }
}

答案 1 :(得分:0)

bool isValid = false;
int num; 
while(!isValid) 
{ 
    cout << "enter a positive odd integer " <<  endl;
    cin >> num;

    if(num < 40 && num > 0 && num % 2 == 1 ) 
     { 
        cout << "thank you"<<endl; 
        isValid = true;
     } 
     else 
            isValid = false;
} 

为什么不使用这样的东西,它会循环直到isValid = true,这只会在你的条件满足时才会发生?

我理解,我猜,如果你正在做一个学校项目或某些事情而且你被迫用for循环来做,但一般来说这对于像这样的东西比for循环更好的解决方案!