学c++的时候好像讲过switch语句不能没有default,做题的时候是要一定加的,不然会报错。今天听了c#的课,说好像default可有可无。弄不清了。
先说结论
不管是c、c++、c#、java,所有这些支持switch语法的语言,都允许不写default,这不是个语法错误
但是写default是个好习惯,哪怕什么都不做,先摆在那放着也行,起码能提醒你还有这个可能性
再说c++和c#里switch语法的不同之处
c++里允许case不加break贯穿标签
c#里如果多个case对应同一段代码则允许这样
但是只要前面的case里有代码则必须加break,不允许继续贯穿
都需要
需要啊,除非你知道全部条件,否则你不知道全部条件情况,且不要 default 的话,你只能这样写:
public static string foo(int num)
{
switch (num)
{
case 0:
return "result 1";
case 1:
return "result 2";
case 2:
return "result 3";
}
return "no result";
}
default 就是在 switch 的缺省情况,就是其他情况都不匹配的时候。也不见得 C++ 不能没有 default 吧,至少不会报错,没有 default 照样可以正常退出 switch 语句,只是需要知道所有的情况。
switch语句中不是必须有default选项的。你可能记错了。
若所有的case都不满足,则找default分支;若未找到则退出整个switch语句。
缺省情况下执行default,最好写上,保证规范
不知道你这个问题是否已经解决, 如果还没有解决的话:我们知道当前面的判断都不成立时,程序就会执行default语句,这里的default语句与位置无关,把它放到最后仅仅是因为可读性更好而已。
例子:
#include <stdio.h> //头文件
#include <windows.h>
void Myprint(int x) //定义函数
{
switch(++x) //开始执行判断,传入的结果进行自加
{
default: //若下列判断都不成立,输出下列语句
printf("This is default! \n");
break; //跳出判断
case 3: case 4: //若值为3或4输出结果
printf("Three \n");
break; //若成立跳出判断
case 2: //若上面判断不成立进行本次判断
printf("Tow \n");
break; //若成立跳出判断
case 1: //同上
printf("one \n");
break;
}
return; //返回结果
}
void main() //程序入口
{
Myprint(4); //调用函数,传入参数2
return; //程序结束
}
运行结果:
注:如果default在判断之前,一定要加break,否则就跟上面没加break的程序一样,下面的语句也会被无条件执行!