一,switch语句1,使用格式 2,注意事项(1)当被测试的变量等于case中的常量时,case后跟的语句将被执行,直到遇到 break 语句为止。(2)不是每一个case都需要包含 break。如果case语句不包含 break,控制流将会 继续 后续的case,直到遇到break为止。(3)上面所有case都无法判断结果时,可用default代替其他所有情况。(4)case后的表达式(的结果)必须是一个常量或字面量,不能是字符等。(5)不管有几个case,switch后面都需要加大括号。二,例题接下来来看几个例题就能完全明白1,"简单计算器"题目:输入两个整数和一个运算符,输出结果。输入
好吧,这实际上不是问题..我只是偶尔发现有一种有趣的方法可以在switch/caseblock中声明局部变量。你可以这样写:switch(action){intres;intvalue;caseACTION_OPEN:res=open(...);...break;case...}所以,我只是想知道除了gcc之外还有哪些C/C++编译器支持这种构造?它看起来像一个常见的失败。欢迎对此结构提出任何意见! 最佳答案 switch主体只是一个普通语句(在您的例子中是一个复合语句,看起来像{...}),它可以包含任何废话。包括外壳标签。Duf
Java、c++、c、c#等语言允许整数类型或在switch-case语句中计算为整数类型的表达式。[string文字和一些其他类型在某些语言中是允许的]为什么我们只需要使用integral类型或一些有限数量的类型而不是像double,float这样的类型?是因为某种优化还是只是为了简单? 最佳答案 首先,Java7允许切换字符串值……C#也是如此。(而在Java中,您不能打开一个long...感谢彼得提醒我。)但是,不允许打开float和double的原因很可能是舍入误差和float的不精确表示的潜在影响会使代码使用非常容易出错的
我刚开始使用C++,但对其他语言有一些先验知识(不幸的是,vb回到了一段时间),但遇到了一个奇怪的困境。我不喜欢使用这么多IF语句,并且想使用switch/cases,因为它看起来更干净,而且我想实践一下……但是……假设我有以下场景(理论代码):while(1){//Loopcanbeconditionalor1,Iuseitalot,forexampleinmygamecharsomething;std::cout";std::cin>>something;//Switchtoread"something"switch(something){case'a':cout这就是我的问题。假
这是一个switch语句的例子。我不明白为什么会这样:intmain(){intnumber1=100,number2=200;switch(number1){case100:{cout上面的程序打印:100然后打印case200的下一条语句。此外,如果在第二种情况下使用了200以外的任何值,它仍然会被执行。我知道在case100之后没有break。但为什么我没有收到编译时错误?更清楚一点,为什么内层案例中的任何其他值也会成功?例如,case70000: 最佳答案 Butwhydon'tIgetacompile-timeerrori
假设:switch(test){//Setsomevariables,callsomefunctions?intx=1;inty=function(x);//case1://Processfortest=1...break;case5://Processfortest=5...break;default://Processforallothercases....}执行我在第一个case之前添加的额外代码是否“合法”?我从未在示例中看到过这一点。 最佳答案 首先是关于switch(真正)如何工作的一些背景知识:switch通常被认为是
在下面的C++代码中:typedefenum{a,b,c}Test;intfoo(Testtest){switch(test){casea:return0;caseb:return1;casec:return0;}}使用-Wall编译时发出警告,表示控制到达非空函数的末尾。为什么?编辑说示例中的变量test可以包含任何值通常是不正确的。foo(12354)不编译:>test.cpp:15:14:error:invalidconversionfrom‘int’to‘Test’>test.cpp:15:14:error:initializingargument1of‘intfoo(Test
这个问题在这里已经有了答案:Caseexpressionnotconstant(5个答案)关闭4年前。这是我的代码:boolCharacter::keyPress(charc){switch(c){caseup_key:move(0,-1);break;casedown_key:move(0,1);break;caseleft_key:move(-1,0);break;caseright_key:move(1,0);break;default:returnfalse;}returntrue;}编译器提示:errorC2051:caseexpressionnotconstanterror
我的一个项目中有很多自定义数据类型,它们都共享一个公共(public)基类。我的数据(来自数据库)有一个数据类型,它由基类的枚举来区分。我的架构允许特定数据类型专门用于派生类,或者它可以由基类处理。当我构造一个我的特定数据类型时,我通常直接调用构造函数:Special_Type_Xa=Special_Type_X("34.34:fdfh-78");a.getFoo();有一些模板魔术也允许像这样构造它:Type_Helper::Typea=Base_Type::construct("34.34:fdfh-78");a.getFoo();对于枚举类型的某些值,可能没有专门化,所以Type
一、一直以为case后面只能接整型常量或常量表达式。也确实在标准C中确实不能接范围表达式。但是在开发中却碰见了case1…3(省略号两侧有空格)这种接范围的用法。gcc/g++中case语句后面可以接一个范围。二、官方的解释 UsingandPortingtheGNUCompilerCollection(GCC):CExtensions4.21CaseRangesYoucanspecifyarangeofconsecutivevaluesinasinglecaselabel,likethis: caselow...high:Thishasthesameeffectasthepropernumb