卡在函数(C++)中的循环中
Stuck in loop within a function (C++)
我写了一个程序,里面有几个菜单。我现在正在调试这个程序,我想在菜单选项中包括一些输入验证。然而,由于某种原因,当它检测到错误的输入时,它会返回到函数的开头,并使用goto
语句(我知道,错误做法:\),它会要求用户输入新的输入,但即使输入是正确的,它也会返回到不允许输入的情况(默认情况)。有人知道发生了什么事吗?
注:
select_variable_check(vector<int> , int)
是一个函数,它检查输入的值以前是否输入过,是否有任何相关性,尽管我认为这与它无关。
void select(vector<int>&select_control) {
char select;
choices:
cin >> select;
int selectint = select;
bool check = select_variable_check(select_control, selectint);
switch (select) {
case ('1','2','3','4','5','6','7','8','9','10'):
if (check == false) {
string city = city_selection(selectint);
double xcoor = xcoor_selection(selectint);
double ycoor = ycoor_selection(selectint);
cout << "n" << city << "n";
select_control.push_back(selectint);
cout << "n Enter next city: ";
cin >> select;
selectint = select;
}
else {
cout << "You have already selected that city, please select another one ";
cin >> select;
}
break;
case '99': {
cout << "TERMINATING" << endl;
Sleep(3000);
exit(0);
break;
}
case '100': {
cout << "input complete" << endl;
break;
}
default: {
cout << "not a valid value, please try again" << endl;
goto choices;
break;
}
}
('1','2','3','4','5','6','7','8','9','10')
的值是'10'
,所以这是唯一会触发第一个case语句的值。写这篇文章的正确方法是:
case '1':
case '2':
case '3':
...
然而,即使有了这种变化,'10'
也是一种特殊的性格,在这里几乎肯定不是正确的。
您的代码可以归结为
start:
get_input
process_input
if good do something
else go to start
end:
现在,当您输入错误的输入时,它将返回到启动状态。您的输入操作将再次失败,因为输入流仍处于错误状态,因此您不会获得新的输入,并且由于您有错误的输入,您将返回开始。要停止此循环,您需要清除流上的错误标志,并删除缓冲区中的任何输入。这将使您的默认情况看起来像
default: {
cout << "not a valid value, please try again" << endl;
cin.clear(); // removes error flags
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n'); // flushes input buffer
goto choices;
break;
}
您需要#include <limits>
才能使用cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n')
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 在基于范围的for循环中使用结构化绑定声明
- 用于C++中带有数组和指针的循环
- 循环中的随机函数
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 在循环C++中指定字符串之后,不会打印该字符串