关于开关的开关状态
About the do-while statment with switch
#include <iostream>
using namespace std;
int main() {
cout << "1. Facebook" << endl;
cout << "2. Twitter" << endl;
cout << "3. Instagram" << endl;
cout << "4. SnapChat" << endl;
int input;
do {
cout << "Enter a selection > ";
cin >> input;
switch(input) {
case 1:
cout << "Facebook is Loading..." << endl;
break;
case 2:
cout << "Twitter is Loading..." << endl;
case 3:
cout << "Instagram is Loading..." << endl;
case 4:
cout << "SnapChat is Loading..." << endl;
break;
default:
cout << "Wrong Selection" << endl;
}
}while(input =! 1 && input =! 2 && input != 3 && input != 4);
return 0;
}
如果我选错了,我想重试进度,我感到困惑,不知道该怎么办,所以有人能告诉我应该做什么吗?
首先。。。
input =! 1 && input =! 2 && input != 3 && input != 4
则那些CCD_ 1应该是CCD_。
其次,如果有人键入非数字输入,cin >> input
将失败,所有未来的输入尝试都将立即失败,甚至不需要等待用户进一步键入任何内容。您需要清除错误状态并忽略流中剩余的任何错误输入字符,比如直到行的末尾:
default:
cout << "Wrong Selection" << endl;
std::cin.clear(); // clear error state
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');.
您需要在程序顶部使用#include <limits>
才能使用std::numeric_limts<>
。
另外,您的前两个case
语句缺少break
,将执行以下case
(s(代码。。。。
我也建议显式检查cin >> input
是否成功,尽管使用C++11可以保证在失败时将=!
0设置为0
,这样它就可以可靠地工作。对于C++03,没有这样的保证,并且在失败后,您可能会在input
中留下任意垃圾,这可能恰好与case
中的一个相匹配。要明确处理此问题,请执行以下操作:
if (!(cin >> input)) input = -1; // sentinel meaning erroneous
如果希望switch语句中断/退出,则需要确保在每个案例之后添加中断。否则,下面的一切都将被执行。你还把(不等于(并写入=!
#include <iostream>
using namespace std;
int main()
{
cout << "1. Facebook" << endl;
cout << "2. Twitter" << endl;
cout << "3. Instagram" << endl;
cout << "4. SnapChat" << endl;
int input;
do {
cout << "Enter a selection > ";
cin >> input;
switch(input) {
case 1:
cout << "Facebook is Loading..." << endl;
break;
case 2:
cout << "Twitter is Loading..." << endl;
break; // add break
case 3:
cout << "Instagram is Loading..." << endl;
break; // add break
case 4:
cout << "SnapChat is Loading..." << endl;
break; // add break
default:
cout << "Wrong Selection" << endl;
}
} while(input != 1 && input != 2 && input != 3 && input != 4); // != not =!
return 0;
}
在每个case
:之后添加一个break
语句
case 2:
cout << "Twitter is Loading..." << endl;
break;
case 3:
cout << "Instagram is Loading..." << endl;
break;
将=!
更改为!=
while(input != 1 && input != 2 && input != 3 && input != 4);
相关文章:
- 既然存在危险,为什么项目要使用-I include开关
- 为什么这个音频包络不能通过开关的情况?
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- 有人知道为什么在开关中使用stoi函数会返回恒定的错误吗
- std::future_error:无关联状态
- C 和 C++ 中开关语句的案例标签的常量值,但显示不同的行为
- 如何避免LED在循环状态变化中闪烁?
- 在 c++ 中在开关情况下使用和不使用"break"时的不同输出
- 为什么我的开关/机箱在使用枚举时默认?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- 状态机与开关情况
- 状态机:使用转换矩阵而不是嵌套的开关案例C++
- 在方法 getline C++ 之后,开关状态反应错误
- 在开关状态情况下,模板功能内部的不同类型的分配
- 浮点变量在开关状态内不起作用
- 读取并行端口状态(简单的Push开关)
- 关于开关的开关状态