c++ /JS中Switch语句的变化
Switch statement variation in C++/JS
刚刚学习JS,有c++, c#的背景,我尝试了这个:
var userChoice=prompt("Enter 1,2 or 3");
switch(userChoice)
{
default : alert("Default case");
case '1': alert("case 1 ");
case '2': alert("case 2 ");
case '3': alert("case 3 ");
}
和c++中的类似代码片段:
#include<iostream>
using namespace std;
int main()
{
int userChoice=1;
switch(userChoice)
{
default : cout<<"Default case ";
case '1': cout<<"case 1 ";
case '2': cout<<"case 2 ";
case '3': cout<<"case 3 ";
}
return 0;
}
在执行userChoice=1时,我发现JSFiddle不包括默认情况,而在c++中,Ideone打印包括默认情况在内的所有情况。让我总结一下。
JS:
1。put userChoice=1,执行case 1,case 2, case 3
2。put userChoice=2,执行case 2, case 3
3。put userChoice=3,执行case 3
4。把userChoice = 4/5 . .,执行默认的case,case 1,case 2, case 3。
c++:1。输入userChoice=任意值,它将执行所有情况!
现在有一点变化,我在默认情况后面加了一个break。导致:
default : cout<<"Default case "; break;
我观察到的是对于JS,除了默认情况外,所有结果都是相同的。而不是执行所有的情况下,它终止默认的一个,好吧,它应该,因为我已经使用了'Break'。
令人惊讶的是,在c++中(当然是在加了break之后):
- 无论我给userChoice什么值,输出只是默认情况。: |
困扰我的事情:
这些是这些语言的预期行为吗,或者它们可能在不同的编译器上有所不同(对于c++)
JS已经知道的位置(我不知道使用什么词)的默认情况下执行之前,而c++只是跟着代码,直到它达到中断(或可能是返回或其他东西)?
是的,我知道我应该更多地使用break语句…但是……出于好奇!
您将变量userChoice
定义为类型int
,并将其初始化为1。
在switch语句中有将转换为类型int
的字符常量,因此如果编码为ASCII, '1'
将等于49,'2'将等于50,以此类推。因此,userChoice
将不等于这两个常量并且控制将传递给标签default
并且该标签之后的所有语句将依次执行因为没有任何跳转语句
#include<iostream>
using namespace std;
int main()
{
int userChoice=1;
switch(userChoice)
{
default : cout<<"Default case ";
case '1': cout<<"case 1 ";
case '2': cout<<"case 2 ";
case '3': cout<<"case 3 ";
}
return 0;
}
如果您要按以下方式更改代码
#include<iostream>
using namespace std;
int main()
{
int userChoice=1;
switch(userChoice)
{
default : cout<<"Default case "; break;
case '1': cout<<"case 1 "; break;
case '2': cout<<"case 2 "; break;
case '3': cout<<"case 3 "; break;
}
return 0;
}
那么你会得到输出
Default case
如果你将49(字符'1'的整数值)赋值给userChoice,那么输出将是
case 1
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- C++取消引用指针.为什么会发生变化
- 为什么在读取文件大小时文件IO速度会发生变化
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 我似乎对if/else的基本语句有问题:/
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- If语句在c++中被忽略
- 为什么cudaMemGetInfo报告设备内存总量的变化
- 比较if语句中的数组值和int值
- 推送的向量值在条件语句 (C++) 后不断变化
- 为什么这个按位操作的if语句的变化会导致错误
- c++ /JS中Switch语句的变化