javascript - C++/JS 中的 Switch 语句变体

标签 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++ 中的类似代码片段:

#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排除 Default case ,而在 C++ 中,Ideone打印所有情况,包括默认情况。好吧,让我总结一下。


JS:

1.输入 userChoice=1 ,执行 case 1,case 2,case 3。

2.输入 userChoice=2 ,执行情况 2、情况 3。

3.输入 userChoice=3 ,执行情况 3。

4.输入userChoice=4/5..,执行default case,case 1,case 2,case 3。

C++:

1.输入userChoice=任何内容,它会执行所有情况!


现在做了一点改变,我在默认情况后放置了一个中断。 导致:

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

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


令人惊讶的是,在 C++ 中(当然在放置中断之后):

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

困扰我的事情:

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

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

是的,我知道我应该更多地使用break语句..但仍然..出于好奇!

最佳答案

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

在 switch 语句中,有一些字符常量将被转换为 int 类型,因此,如果编码是 ASCII、'2,'1' 将相当于 49 ' 将等于 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

如果您将字符“1”的整数值 49 分配给 userChoice,则输出将为

case 1 

关于javascript - C++/JS 中的 Switch 语句变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22361078/

相关文章:

javascript - Js 将一个减号字符串转化为一个减号

c++ - mmap 是否返回对齐的指针值

c++ - 获取多行输入以在 C++ 中进行解析

jquery 代码导致不需要的空间

javascript - 在angular js中发现循环依赖

javascript - Ext.util.JSONP.request 始终返回 "Uncaught ReferenceError: callback is not defined"

c++ - IPv4 和 IPv6 地址的 connect() 行为

javascript - 适用于 JSFiddle 但不适用于本地?

javascript - 将内联 Youtube API javascript 代码移至单独的文件

javascript - 推荐每页只有一个文件 `.js`?