开关/机箱不间断循环
Switch/Case nonstop looping
我创建了一个菜单,用户必须在其中输入 1-5 之间的数字,每当用户输入一个数值时,它就会完美地工作,它要么进入指定的大小写,要么在无效数字的情况下,它将转到默认值并出现错误消息。
现在我的问题是当用户输入一个字母时,程序会不断循环,每次通过默认值时,它都不会停止。
我尝试了很多东西!使用 if 语句检查数字是否为 1 <= 值 <= 5 不起作用。如果输入不在这些值之间,我尝试硬编码数字,它仍然永远循环。我尝试做 cim.good(),不确定我是否做对了,但我这样做的方式不起作用。我也尝试使用 isdigit() 函数,但同样的问题,它不起作用......我真的不知道我该做什么。这是我所拥有的(简化)。
int menu()
{
int key;
cout << endl << "--------- Main Menu ----------" << endl;
cout << "1: Sort" << endl << "2: Add" << endl;
cout << "3: Search" << endl << "4: History" << endl << "5: Exit" << endl;
cout << "Please pick one: ";
cin >> key;
return(key);
}`
void main()
{
Menu:
key = menu();
switch(key)
{
case 1:
goto Menu;
case 2:
goto Menu;
case 3:
goto Menu;
case 4:
goto Menu;
case 5:
break;
default:
cout << endl << "Invalid entry, please try again" << endl;
goto Menu;
}
}
我删除了箱子里的内容,让它看起来更好。当我输入密钥时,我不断收到"无效条目,请重试"消息,所以这就是它正在经历的地方。
编辑:好吧,我为"goto"道歉,不知道它皱眉,仍在学习!谢谢大家的帮助。我肯定会开始删除它们。
与其使用
goto
,我建议你使用一个简单的do {} while
循环,比如
#include <iostream>
using namespace std;
int menu() {
int key;
cout << endl << "--------- Main Menu ----------" << endl;
cout << "1: Sort" << endl << "2: Add" << endl;
cout << "3: Search" << endl << "4: History" << endl << "5: Exit" << endl;
cout << "Please pick one: ";
cin >> key;
return(key);
}
int main(int argc, char *argv[]) {
int key;
do {
key = menu();
} while (key < 1 || key > 5);
cout << key << endl;
}
哪个循环而key < 1
或key > 5
.
看看C++常见问题精简版和这篇文章中的这篇文章。
与cin.good()
一起检查是解决方案的第一部分。如果输入非整数cin.good()
将返回 false。但是,不正确的输入将留在缓冲区中。因此,如果您再次遇到cin >> key
,它将再次无法读取任何内容。
您必须使用 cin.clear()
清除状态,然后使用 cin.ignore(INT_MAX, 'n')
忽略缓冲区的其余部分(直到行尾)
所以你的方法会变成:
int menu() {
int key;
cout << endl << "--------- Main Menu ----------" << endl;
cout << "1: Sort" << endl << "2: Add" << endl;
cout << "3: Search" << endl << "4: History" << endl << "5: Exit" << endl;
cout << "Please pick one: ";
while(cin >> key) { // same as querying cin.good()
cout << "Not a number" << endl;
cin.clear();
cin.ignore(INT_MAX, 'n');
}
return(key);
}
相关文章:
- 为什么我的for循环不能正确获取argv
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 嵌套While循环不起作用(C++问题)
- 嵌套的 for 循环不循环通过第二个数组
- For 循环不会停止在 C++ Arduino
- while 循环不以哨兵值终止
- 为什么循环不会停止?C++
- 虽然循环不读取整个 ifstream 文件
- 循环不继续无法弄清楚为什么
- C++ 我的开关格式中的循环不允许我显示菜单选项或接受输入?
- 在 mmap'ed 区域上使用 memcpy 崩溃,for 循环不会
- 为什么程序运行时我的第二个循环不执行?
- 当我告诉它通过控制台执行此操作时,我的c ++循环不会停止
- 为什么当我对数组使用增量操作时,do for 循环不起作用
- 在矩阵逆变器上工作,由于某种原因,我的指数循环不起作用
- 未能优化看似明显的循环不变量(但volatile限定符发挥了神奇的作用)
- 开关/机箱不间断循环
- 在循环中不间断地从list中删除元素
- 如何不间断地提前结束一个循环