C ++输入验证(时间)

时间:2014-04-27 22:43:49

标签: c++ validation

您好我正在尝试进行输入验证if if time for time。用户将输入一个数字,如果它是一个涉及时间的无效数字(IE为负数,或25小时),代码将显示“无效输入”并返回上一个问题,以便您可以重新输入有效输入。这是我到目前为止所做的,但它似乎没有起作用。

cout << "Please enter the current processing hour." << endl;
    cin >> hr;          
    if (hr >= 0 && hr < 24)
        cout << "Invalid Input, try again.";
    cout << endl;

    cout << "Please enter the current processing minute." << endl;
    cin >> min;
    if (min >= 0 && min < 60)
        cout << "Invalid Input, try again.";
    cout << endl;

    cout << "Please enter the current processing second." << endl;
    cin >> sec;
    if (sec >= 0 && sec < 60)
        cout << "Invalid Input, try again.";
    cout << endl;

3 个答案:

答案 0 :(得分:1)

你的条件不好:

我会给你一个:

if(hr&gt; = 0&amp;&amp; hr&lt; 24)

应该是

if(hr&lt; 0 || hr&gt; 23)

这假设小时数可以是0到23.(正如迈克在下面建议的那样)

答案 1 :(得分:0)

您的代码没有循环。你的陈述只是执行然后停止。在输入正确之前,您需要某种形式的循环。

此外,您的if语句也没有大括号。因此,如果条件为真,它将始终只执行下一个语句,如果条件为假,则跳过该语句。如果你把括号放在那里,通常更容易维护代码。

以下是一个示例代码段,用于说明哪些内容适用于您

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

int hr;
int isValid = 0;

while(0 == isValid)
{
    cout << "Please enter the current processing hour." << endl;
    cin.clear();
    cin >> hr;
    cout << "Input '"<< hr << "'" << endl;

    if (hr >= 0 && hr < 24)
    {
        isValid = 1;
        cout << "Valid." << endl;
    }
    else
    {
        cout << "Invalid, try again." << endl;
    }
}

注意我如何使用变量来跟踪输入状态,而不是通过break;转义循环。这允许函数只有一种退出方式。通常是降低错误率的好方法。

以下是更详细的代码:

#include <iostream>

int getAndValidateInteger(const char * question, int min, int max);

int main(int argc, char* argv[])
{
    int hour, minutes, seconds;

    hour = getAndValidateInteger("Please enter the current processing hour.", 0, 23);
    minutes = getAndValidateInteger("Please enter the current processing minute.", 0, 59);
    seconds = getAndValidateInteger("Please enter the current processing second.", 0, 59);

    return 0;
}

int getAndValidateInteger(const char * question, int min, int max)
{
    using std::cout;
    using std::cin;
    using std::endl;

    int number;
    int isValid = 0;

    while(0 == isValid)
    {
        cout << question << " (Range [" << min << ";" << max << "])" << endl;
        cin.clear();
        cin >> number;
        cout << "Input '"<< number << "' " ;

        if (number >= min && number <= max)
        {
            isValid = 1;
            cout << "is valid." << endl;
        }
        else
        {
            cout << "is invalid, try again." << endl;
        }
    }

    return number;
}

答案 2 :(得分:0)

你需要一个循环,以便它可以返回并再试一次:

while(1) {
    cout << "Please enter the current processing hour." << endl;
    cin >> hr;          
    if (hr >= 0 && hr < 24)
        break;
    cout << "Invalid Input, try again.";
}
cout << endl;