切换C ++ / JS中的语句变体

时间:2014-03-12 18:48:07

标签: javascript c++ jsfiddle

刚学习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 ++中的simillar片段:

#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.输入userChoice = 1,执行案例1,案例2,案例3。

2.Putting userChoice = 2,执行案例2,案例3。

3.Putting userChoice = 3,执行案例3.

4.Putting userChoice = 4/5 ..,执行默认情况,案例1,案例2,案例3。

C ++:

1.Putting userChoice = any,它执行所有情况!


现在稍微改变一下,我在默认情况下休息一下。 导致:

default : cout<<"Default case "; break;

我观察到的是JS,除了默认情况外,所有结果都是相同的。它不是执行所有情况,而是以默认值终止,它应该是,因为我使用了'Break'。


令人惊讶的是,在C ++中(在打破之后):

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

  2. 困扰我的事情:

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

    2. 在执行之前,JS是否已经知道默认情况的位置(我不知道使用什么词),而C ++只是跟随代码,直到它到达中断(或者可能是返回或其他东西)

    3. 是的,我知道我应该更多地使用休息陈述..但仍然是出于好奇!

1 个答案:

答案 0 :(得分:2)

您将变量userChoice定义为类型int并将其初始化为1。

在switch语句中,有一些字符常量将转换为int类型。如果编码为ASCII,则'1'将等于49,&#39; 2&#39;将等于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是字符&#39; 1&#39;的整数值。到userChoice然后输出

case 1