您好我正在尝试进行输入验证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;
答案 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;