C++:来自输入验证的无限循环
C++: Infinite loops from input validation
所以我有这个方法,我必须接受一个值(一个值 大于 1 的整数),如果给定的值,则循环回到用户初始化被认为超出了上述参数。
我遇到的问题是,当 字母 被输入到控制台时,程序要么将字母解释为 0(这是用于退出程序的特殊数字) , 或者(当我试图给出一个虚拟值时)将进入一个无限循环,在这个循环中(我相信)程序只是不断地输入虚拟值而不是从用户那里接收新的输入。
void input(int &n)
{
do
{ //prompt
cout << "Input an integer number greater than 1:" << endl;
//initialization and check for non-int value
if (!(cin >> n))
{
cout << "THE NUMBER INPUT IS NOT RECOGNISED AS AN INTEGER, TRY AGAIN." << endl;
n = 1;
}
//checks for special int values
if (n == 0)
exit(0);
else if (n < 1)
cout << "INPUT VALUE OF " << n << " IS NOT ALLOWED, TRY AGAIN." << endl;
} while (n <= 1);
}
上面是植入了虚拟值的程序的样子。欢迎任何建议,提前致谢。
你声明变量了吗?我的意思是给定的代码将显示错误,因为您没有声明 'n' 是一个整数。
还,
我认为您使用的语法是错误的。你可以做
while(condition)
{
statement(s)
}
或者你可以做
do{
statement(s)
}
while( condition );
据我所知,上面给出的代码应该显示错误。
您的代码中发生的事情是,每当您输入一个字母时,cin
都会为后续输入保持其无效状态,因此您必须首先清除它并删除错误的输入。所以你可以这样做:
if (!(cin >> n)) {
cout << "THE NUMBER INPUT IS NOT RECOGNISED AS AN INTEGER, TRY AGAIN." << endl;
cin.clear();
while(cin.get() != '\n');
n = 1;
}
所以我有这个方法,我必须接受一个值(一个值 大于 1 的整数),如果给定的值,则循环回到用户初始化被认为超出了上述参数。
我遇到的问题是,当 字母 被输入到控制台时,程序要么将字母解释为 0(这是用于退出程序的特殊数字) , 或者(当我试图给出一个虚拟值时)将进入一个无限循环,在这个循环中(我相信)程序只是不断地输入虚拟值而不是从用户那里接收新的输入。
void input(int &n)
{
do
{ //prompt
cout << "Input an integer number greater than 1:" << endl;
//initialization and check for non-int value
if (!(cin >> n))
{
cout << "THE NUMBER INPUT IS NOT RECOGNISED AS AN INTEGER, TRY AGAIN." << endl;
n = 1;
}
//checks for special int values
if (n == 0)
exit(0);
else if (n < 1)
cout << "INPUT VALUE OF " << n << " IS NOT ALLOWED, TRY AGAIN." << endl;
} while (n <= 1);
}
上面是植入了虚拟值的程序的样子。欢迎任何建议,提前致谢。
你声明变量了吗?我的意思是给定的代码将显示错误,因为您没有声明 'n' 是一个整数。 还, 我认为您使用的语法是错误的。你可以做
while(condition)
{
statement(s)
}
或者你可以做
do{
statement(s)
}
while( condition );
据我所知,上面给出的代码应该显示错误。
您的代码中发生的事情是,每当您输入一个字母时,cin
都会为后续输入保持其无效状态,因此您必须首先清除它并删除错误的输入。所以你可以这样做:
if (!(cin >> n)) {
cout << "THE NUMBER INPUT IS NOT RECOGNISED AS AN INTEGER, TRY AGAIN." << endl;
cin.clear();
while(cin.get() != '\n');
n = 1;
}