如何在switch的default分支终止函数执行?(含替代方案)
解决方法与替代方案
在getraenk函数的default分支中终止函数执行、避免后续代码运行,有几种实用的方式,下面逐一说明:
1. 最直接的方式:使用return语句
因为getraenk是void类型的函数,你可以直接在default分支里调用return;,它会立即结束当前函数的执行,后续的打印付款信息、付款逻辑都会被跳过。
修改后的代码片段:
void getraenk() { //选择项 printf("Drinks\n cola = 1\n fanta = 2\n s = 3\n"); //选择 int choose; float pay; scanf("%d", &choose); switch (choose) { case 1: pay = 1; break; case 2: pay = 2; break; case 3: pay = 2; break; default: printf("wrong choose"); return; // 直接终止函数,后续代码不再执行 } printf("pay %.2f", pay); //付款 float paid; // ... 剩余付款逻辑 }
这个方法的优点是简洁直观,完全符合你的需求,还能避免pay未初始化就被打印的未定义行为(因为default分支里没给pay赋值)。
2. 使用goto跳转(谨慎使用)
如果你不想用return,可以在函数末尾设置一个标签,然后在default分支里跳转到这个标签处,直接结束函数。不过要注意goto容易让代码可读性变差,只适合简单的跳转场景。
示例:
void getraenk() { //选择项 printf("Drinks\n cola = 1\n fanta = 2\n s = 3\n"); //选择 int choose; float pay; scanf("%d", &choose); switch (choose) { case 1: pay = 1; break; case 2: pay = 2; break; case 3: pay = 2; break; default: printf("wrong choose"); goto end_of_function; // 跳转到函数末尾 } printf("pay %.2f", pay); //付款 float paid; // ... 剩余付款逻辑 end_of_function: // 函数结束标签 return; }
3. 使用标志变量控制后续代码
定义一个标志变量(比如int is_valid = 1;),在default分支里将标志设为0,然后后续的所有代码都包裹在if(is_valid)条件判断里,这样当选择错误时,后续逻辑就不会执行。
示例:
void getraenk() { int is_valid = 1; // 标志变量,标记选择是否有效 //选择项 printf("Drinks\n cola = 1\n fanta = 2\n s = 3\n"); //选择 int choose; float pay; scanf("%d", &choose); switch (choose) { case 1: pay = 1; break; case 2: pay = 2; break; case 3: pay = 2; break; default: printf("wrong choose"); is_valid = 0; // 标记选择无效 break; } if(is_valid) { // 只有选择有效时才执行后续代码 printf("pay %.2f", pay); //付款 float paid; // ... 剩余付款逻辑 } }
这个方法适合需要在多个分支里判断是否继续执行的场景,灵活性更高,但代码会多一层条件判断。
内容的提问来源于stack exchange,提问作者Gottaquest
相关产品推荐
相关产品推荐

