c++ /JS中Switch语句的变化

Switch statement variation in C++/JS

本文关键字:语句 变化 Switch JS c++      更新时间:2023-10-16

刚刚学习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之后):

  1. 无论我给userChoice什么值,输出只是默认情况。: |

困扰我的事情:

  1. 这些是这些语言的预期行为吗,或者它们可能在不同的编译器上有所不同(对于c++)

  2. 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