c switch case语句语句问题

关于switch语句中定义变量的问题
本文系转载:
switch语句中定义变量
switch内部的变量定义
核心提示:
在switch语句内定义一个变量的时候,如果不在一个语句块内,它作用域是直到遇到switch的"}"才结束的。
1&有default时,可在default中定义,而不需要{}.
2&无default时,可在最后一个case里定义,不不需要{}.
3&其他情况都需要{}.
说明:1&,2&情况都是特例,刚好正确的"利用"了switch语句的}
===========================================================
对于switch结构,只能在它的最后一个case标号或default标号后面定义变量:
case true:
// error:declaration precedes a case label, skipped by case
string file_name=get_file_name();
case false:
制定这个规则是为了避免出现代码跳过变量的定义和初始化的情况。回顾变量的作用域,变量从它的定义点开始有效,直到它所在块结束为止。现在考虑如果在两个case标号之间定义变量会出现什么情况。该变量会在块结束之前一直存在。对于定义该变量的标号后面的其他case标号,它们所关联的代码都可以使用这个变量。如果switch从那些后续case标号开始执行,那么这个变量可能还未定义就要使用了。这种情况下,如果需要为某个特殊的case定义变量,则可以引入块语句,在该块语句中定义变量,从而保证这个变量在使用前被定义和初始化。
case true:
//ok:declaration statement within a statement block
string file_name=get_file_name();
case false:
很实用的东西
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。您当前所在位置:&>>&&>>&正文
本教程章节列表
switch语句的用法和使用示例
创建时间:日 21:09&&阅读次数:(6792)
4.4&使用switch&语句某些时候,在嵌套使用if语句时,所有if语句看起来都非常相似,因为它们都在对一个完全相同的表达式进行求值,唯一的区别是每个if语句都将表达式的结果与一个不同的值进行比较。例如,考虑以下代码块,它用一个if语句来检查day变量中的值,并判断它对应的是星期几:if&(day&==&0)dayName&=&"Sunday";else&if&(day&==&1)dayName&=&"Monday";else&if&(day&==&2)dayName&=&"Tuesday";else&if&(day&==&3)...elsedayName&=&"Unknown";在这些情况下,通常可以将嵌套if语句改写成一个switch语句,提高程序的运行效率,并增强可读性。
4.4.1&理解switch语句的语法switch语句的语法如下(switch,case和default是C#关键字):switch&(&controllingExpression&){case&constantExpression&:statementscase&constantExpression&:statements...default&:statements}controllingExpression(控制表达式)只求值一次。然后,程序逐个检查constantExpression(常量表达式),如果找到和controllingExpression的值相等的一个constantExpression,就执行由它标识的那个代码块。我们将constantExpression称为case标签,一个case标签所标识的代码块则称为case块。进入case块之后,程序将一直执行,直到遇到一个break语句为止。遇到break之后,switch语句就会结束,程序将从switch语句结束大括号之后的第一个语句继续执行。如果没有任何一个constantExpression的值等于controllingExpression的值,就运行由可选的default标签所标识的代码块。注意:每个constantExpression的值都必须是唯一的,使controllingExpression只能与它们当中的一个值匹配。如果controllingExpression的值和任何一个constantExpression的值都不匹配,也没有default标签,程序就从switch的结束大括号之后的第一个语句继续执行。例如,前面的嵌套if语句可以改写成以下switch语句:switch&(day){case&0&:dayName&=&"Sunday";case&1&:dayName&=&"Monday";case&2&:dayName&=&"Tuesday";...default&:dayName&=&"Unknown";}4.4.2&遵守switch语句的规则switch语句非常有用。但遗憾的是,你不能想用就用。使用时必须谨慎。任何switch语句都必须严格遵循以下规则。●&只能将switch语句用于基本数据类型,例如int或string。对于其他任何类型(包括float和double类型),只能用if语句。●&case标签必须是常量表达式(constantExpression),如42或者"42"。如果需要在运行时计算case标签的值,则必须使用if语句。●&case标签必须具有唯一性;也就是说,不允许两个case标签具有相同的值。●&可以连续写一系列case标签(中间不间插额外的语句),指定在多种情况下都运行相同的语句。如果像这样写,最后一个case标签之后的代码将适用于所有case。然而,假如两个标签之间有额外的代码,同时没有使用break跳出,就不能从第一个标签贯穿(也称直通)到第二个标签,编译器会报错。例如:switch&(trumps){case&Hearts&:case&Diamonds&:&//&允许贯穿—标签之间无额外代码color&=&"Red";&//&针对Hearts和Diamonds这两种情况都会执行的代码case&Clubs&:color&=&"Black";case&Spades&:&//&出错—标签之间有额外代码,而且没有使用break来跳出color&=&"Black";}注意:break语句是用来阻止直通的最常见的方式,但也可以用一个return语句或者一个throw语句来替代它。throw语句的详情将在第6章讨论。switch语句的直通规则在间插了额外语句的前提下,就不能从一个case直通到下一个case标签,所以可以自由地安排switch语句的各个区域,不用担心这样做会改变其含义(就连default标签都可以随便摆放;它通常是最后一个标签,但并非一定要如此)。C和C++程序员要注意的是,在使用C#编程时,必须为switch语句中的每个case(包括default&case)都提供一个break语句。这个要求是一件好事情;在C和C++程序中,很容易因为忘记添加break语句而直通到后续的标签,造成很难发现的bug。然而,如果真的喜欢,也可以在C#中模拟C++的直通行为,具体做法是使用一个goto语句来转到下一个case或者default标签。但这种用法是不推荐的,本书也不打算介绍具体做法&!在下面的练习中,我们准备完成一个程序,它读取一个字符串中包含的字符,并将每个字符都映射成相应的XML形式。例如,&字符在XML中具有特殊含义(用于构成元素),所以要想正确显示它,就必须转换成"&",使XML处理器知道这是数据而不是XML指令的一部分。类似的规则也适用于&&,&,'和"等字符。我们将写一个switch语句来测试字符的值,并将特殊XML字符作为case标签来使用。编写switch语句1.&如果尚未运行Visual&Studio&2010,请启动它。2.&打开SwitchStatement项目,它位于“文档”文件夹下的\Microsoft&Press\Visual&CSharp&Step&by&Step\Chapter&4\SwitchStatement子文件夹中。3.&在“调试”菜单中选择“开始执行(不调试)”。&Visual&Studio&2010将生成并运行应用程序。应用程序将显示下图所示的一个窗体,其中包含上下两个文本框,中间用一个Copy按钮分隔开。4.&在上方的文本框中键入以下示例文本:inRange&=&(lo&&=&number)&&&&(hi&&&=number);5.&单击Copy按钮。一个字符从上方的文本框复制到下方的文本框。目前,copyOne方法中包含一个switch语句,其中只有一个default操作。在后续的步骤中,我们将修改这个switch语句,使它能将在XML中有特殊含义的字符转换成它们的XML映射。例如,&字符将转换成字符串"&"。6.&关闭窗体,返回Visual&Studio&2010。7.&在“代码和文本编辑器”窗口中显示MainWindow.xaml.cs的代码,并找到copyOne方法。&copyOne方法负责将一个字符从上方的文本框复制到下方的文本框。目前,copyOne方法中包含一个switch语句,其中只有一个default操作。在后续的步骤中,我们将修改这个switch语句,使它能将在XML中有特殊含义的字符转换成它们的XML映射。例如,&字符将转换成字符串"&"。8.&在switch语句的{之后、default标签之前添加以下语句:case&'&'&:target.Text&+=&"&";如果当前被复制的字符是一个&,上述代码会把字符串"&"附加到正在输出的文本末尾。9.&在新加的break语句之后、default标签之前添加以下语句:case&'&&'&:target.Text&+=&"&";case&'&'&:target.Text&+=&"&";case&'\"'&:target.Text&+=&""";case&'\''&:target.Text&+=&"'";注意&在C#语言和XML中,单引号(')和双引号(")都有特殊含义,它们都用于界定字符和字符串常量。最后两个case中的反斜杠(\)是一个转义符,会导致C#编译器把这些字符当作文字常量(literal)来处理,而不是当作定界符。10.&在“调试”菜单中选择“开始执行(不调试)”。11.&在上方的文本框中输入以下文本:inRange&=&(lo&&=&number)&&&&(hi&&&=&number);12.&单击Copy按钮。&语句被复制到下方的文本框中。这一次,每个字符都会在switch语句中进行XML映射处理。target文本框将显示以下转换结果:inRange&=&(lo&&=&number)&&&&(hi&&=&number);13.&再用其他字符串做试验,验证所有特殊字符(&,&&,&,'和')都能够得到正确处理。14.&关闭窗体。本章讨论了Boolean表达式和变量。讲述了如何在if和switch语句中使用Boolean表达式在程序中做出选择。另外,还练习了用Boolean操作符合并Boolean表达式。如果希望继续学习下一章的学习,请继续运行Visual&Studio&2010,然后阅读第5章。如果希望现在就退出Visual&Studio&2010,请选择“文件”|“退出”。如果看到“保存”对话框,请单击“是”按钮保存项目。
第4章快速参考
判断两个值是否相等
使用操作符==或!=
比较两个表达式的值
使用操作符&,&=,&或&=
声明一个布尔变量
声明bool类型
创建一个布尔表达式,只有在两个条件为true时,该表达式才为true
使用操作符&&
= (lo &= number)
(number &= hi);
创建一个布尔表达式,只要两个条件中的一个为true,该表达式就为true
使用操作符||
outOfRange
= (number & lo)
(hi & number);
条件为true时运行一个语句
条件为true时运行多个语句
使用一个if语句
使用一个if语句加一个代码块
process();
(seconds == 59)
seconds = 0;
minutes++;
将不同的语句与控制表达式的不同的值关联到一起
使用switch语句
switch (current)
来源:.net学习网
说明:所有来源为 .net学习网 的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】
发表评论:
请输入问题&&的结果(结果是:)、以下关于switch语句和break语句的描述中正确的是____A、在switch语句中必须使用break语句B、break语句只能用于switch语句体中C、break语句只能用于循环语句中D、在switch语句中使用break语句_百度作业帮
、以下关于switch语句和break语句的描述中正确的是____A、在switch语句中必须使用break语句B、break语句只能用于switch语句体中C、break语句只能用于循环语句中D、在switch语句中使用break语句
、以下关于switch语句和break语句的描述中正确的是____A、在switch语句中必须使用break语句B、break语句只能用于switch语句体中C、break语句只能用于循环语句中D、在switch语句中使用break语句或continue语句的作用相同c++中嵌套switch语句问题
在做程序的时候,因为有多个选择菜单,而且每个分支里还有分支.我选用了switch语句,但发现如果在分支里定义了新变量,那么在分支没有使用while来循环执行时候,程序是可以正确运行的,但一旦加上了循环,就提示错误,通不过编译.后来在网上苦苦搜索了一会终于找到了解决方法,通过用{}来约束就可以了,至于为什么那就不是很清楚了(知道的朋友不妨告诉我,让我学点东西吧!).
以下是网上的解答:
这样书写 & & switch(条件){ & & & & case & 条件1:{ & & //你在这个{} & 块里面怎么定义变量,嵌套都可以 & & & & }; & & & .... & & & & }
在switch语句里定义变量,需要加{}。
如果在switch & 调用函数,也最好加 & {}
如果在swich中有for/if也最好加{}&&
下面则是我的测试程序:
#include &iostream&02
using namespace std;03
int main()04
int choice=1;06
while(choice) {07
& cout&&&1.check1\n&;08
& cout&&&2.check2\n&;09
& cout&&&3.check3\n&;10
& cout&&&0.exit\n&;11
& cout&&&enter choice:&;12
& cin&&choice;13
& switch(choice) {14
& case 1:&& {15
&&& int choice1=1;16
&&& while(choice1) {17
&&&& cout&&&1.check1.1\n&;18
&&&& cout&&&2.check1.2\n&;19
&&&& cout&&&0.exit\n&;20
&&&& cout&&&enter choice1:&;21
&&&& cin&&choice1;23
&&&& switch(choice1) {24
&&&&& case 1:25
&&&&&& cout&&&\ta1\n&;26
&&&&&& break;27
&&&&& case 2:28
&&&&&& cout&&&\ta2\n&;29
&&&&&& break;30
&& break;34
& case 2: {35
&&& int choice2=1;36
&&& while(choice2) {37
&&&& cout&&&1.check2.1\n&;38
&&&& cout&&&2.check2.2\n&;39
&&&& cout&&&0.exit\n&;40
&&&& cout&&&enter choice2:&;41
&&&& cin&&choice2;42
&&&& switch(choice2) {43
&&&&& case 1:44
&&&&&& cout&&&\tb1\n&;45
&&&&&& break;46
&&&&& case 2:47
&&&&&& cout&&&\tb2\n&;48
&&&&&& break;49
&& break;53
& case 3: {54
&&& int choice3=1;55
&&& while(choice3) {56
&&&& cout&&&1.check3.1\n&;57
&&&& cout&&&2.check3.2\n&;58
&&&& cout&&&enter choice3:&;59
&&&& cin&&choice3;60
&&&& switch(choice3) {61
&&&&& case 1:62
&&&&&& cout&&&\tc1\n&;63
&&&&&& break;64
&&&&& case 2:65
&&&&&& cout&&&\tc2\n&;66
&&&&&& break;67
&& break;71
return 0;74
觉得应该能改得更好的也不妨告诉我吧,俺还是菜鸟哦!
&&最后修改于
请各位遵纪守法并注意语言文明c语言问题:若有定义 float x=1.5;int a=1,b=3,c=2;则正确的switch语句是:_百度知道
c语言问题:若有定义 float x=1.5;int a=1,b=3,c=2;则正确的switch语句是:
本题目的一个错误选项自己不太明白:B:switch((int)x);
{c畅伐扳和殖古帮汰爆咯ase 1:printf(&*\n&);
case 1:printf(&**\n&);}不太明白怎么错的,还有哪位高手能不能在帮我讲一下switch语句的注意点!及一些用法!谢谢!
第二个是case2
提问者采纳
你是想问那里错了 还是怎么的
如果说错 那就是你 swit畅伐扳和殖古帮汰爆咯ch((int)x);多了个分号
属于语法错误在个就是没有加break 满足了第1个条件开始
后面的就都打印出来了
提问者评价
呵呵!谢谢提醒!
其他类似问题
为您推荐:
其他3条回答
switch((int)x);后面不能加上“;”应用switch语句,是针对选择内容比较多是情况下,当然,switch当中的条件,最好在外面设置,比如tag=(int)畅伐扳和殖古帮汰爆咯x; switch(tag),这样就更加清楚。一般的switch语句,后面都会跟有break;以使语句结束。
第一:case里的只能是整型或者枚举型常量第二:每个case后一般都有个break;要不然每个case都会执行到,直到遇到break,或者运行到switch结束第三:一般case的都是不同的常量,你为什么会有两个1呢?
switch((int)x);不能加;
switch的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 js switch case语句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信