鱼C论坛

 找回密码
 立即注册
查看: 1120|回复: 12

[已解决]程序运行

[复制链接]
发表于 2020-12-7 10:19:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
int main ( )
{
int a = 15, b = 21, m = 0;
switch (a % 3)
{
case 0: m++; break;       这个break是连下一个switch也跳出了吗,为什么不执行下面那个switch语句了
case 1:m++;
switch(b % 2)
{
default: m++;
case 0:m++; break;
}
}
printf("%d\n", m);
}
最佳答案
2020-12-8 13:48:47
本帖最后由 rt3 于 2020-12-8 13:57 编辑

第2个 switch  是 在 执行 第1个 switch 语句的 case 1段时才会调用。
为了便于理解,对你的代码添加了一些缩进,以及几个用于调试的printf语句,并变更了a的值
#include <stdio.h>
int main ( )
{
    int a = 16, b = 21, m = 0;
    switch(a%3){
    case 0:
        m++;
        break;       //这个break是连下一个switch也跳出了吗,为什么不执行下面那个switch语句了
    case 1:
        m++;
        switch(b%2){
            default:
                m++;
            case 0:
                printf("switch 2 case 0.\n");
                m++;
                break;
        }
     printf("switch 1 case 1.\n");
    }
    printf("%d\n", m);
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-7 19:47:27 | 显示全部楼层
你这个程序想干什么,搞不懂
就你提出的问题,回答如下:
1、break 只在本作用域起作用,不会影响到作用域外其他的程序段
2、下面那么 switch 语句没有执行,并非是上面的 break ,而是因为你下面那个程序段,没有对应的 case,b % 2 = 21 % 2 = 1,下面只有 case 0,没有 case 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-7 21:55:46 | 显示全部楼层
风过无痕1989 发表于 2020-12-7 19:47
你这个程序想干什么,搞不懂
就你提出的问题,回答如下:
1、break 只在本作用域起作用,不会影响到作用 ...

哥们,我的记忆里switch 的 break;是跳出整个循环的。
不信你去调试一下,程序到break是直接到printf的 和下面的switch根本没有关系好吗
实在不行 你去看这个https://blog.csdn.net/Alices_zhu/article/details/82462982
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-8 13:45:35 | 显示全部楼层
城头有平安 发表于 2020-12-7 21:55
哥们,我的记忆里switch 的 break;是跳出整个循环的。
不信你去调试一下,程序到break是直接到printf的  ...

break跳出不是只跳出一个循环吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-8 13:47:09 | 显示全部楼层
风过无痕1989 发表于 2020-12-7 19:47
你这个程序想干什么,搞不懂
就你提出的问题,回答如下:
1、break 只在本作用域起作用,不会影响到作用 ...

那第二个switch里面的个default也不执行吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-8 13:48:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 rt3 于 2020-12-8 13:57 编辑

第2个 switch  是 在 执行 第1个 switch 语句的 case 1段时才会调用。
为了便于理解,对你的代码添加了一些缩进,以及几个用于调试的printf语句,并变更了a的值
#include <stdio.h>
int main ( )
{
    int a = 16, b = 21, m = 0;
    switch(a%3){
    case 0:
        m++;
        break;       //这个break是连下一个switch也跳出了吗,为什么不执行下面那个switch语句了
    case 1:
        m++;
        switch(b%2){
            default:
                m++;
            case 0:
                printf("switch 2 case 0.\n");
                m++;
                break;
        }
     printf("switch 1 case 1.\n");
    }
    printf("%d\n", m);
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-8 13:53:59 | 显示全部楼层
rt3 发表于 2020-12-8 13:48
第2个 switch  是 在 执行 第1个 switch 语句的 case 1段时才会调用。
为了便于理解,对你的代码添加了一 ...

但是我那个输出结果是1,这个是3呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-8 13:55:39 | 显示全部楼层
1447391641 发表于 2020-12-8 13:53
但是我那个输出结果是1,这个是3呀

输出3是因为修改了a的值。这样改是为了说明两个switch语句之间的从属关系。
改回去就输出1了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-8 13:57:51 | 显示全部楼层
rt3 发表于 2020-12-8 13:55
输出3是因为修改了a的值。这样改是为了说明两个switch语句之间的从属关系。
改回去就输出1了。

懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-8 13:58:44 | 显示全部楼层
rt3 发表于 2020-12-8 13:55
输出3是因为修改了a的值。这样改是为了说明两个switch语句之间的从属关系。
改回去就输出1了。

这个是看花括号看出来的第二个switch在第一个switch里面吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-8 13:59:11 | 显示全部楼层
1447391641 发表于 2020-12-8 13:58
这个是看花括号看出来的第二个switch在第一个switch里面吧

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-8 14:21:49 | 显示全部楼层
城头有平安 发表于 2020-12-7 21:55
哥们,我的记忆里switch 的 break;是跳出整个循环的。
不信你去调试一下,程序到break是直接到printf的  ...

break 是跳出当前的循环,怎么可能是跳出整个的循环?一个 switch 就是一个循环,怎么可能连下面那个循环都跳出?再举以下的例子:
for(i = 0;i < 10;i++)
{
    for(j = 0;j < 10;j++)
    {
         . . .
          break;
     }
}
break 只能是跳出 j 循环,绝对不可能跳出 i 循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-8 23:03:25 | 显示全部楼层
风过无痕1989 发表于 2020-12-8 14:21
break 是跳出当前的循环,怎么可能是跳出整个的循环?一个 switch 就是一个循环,怎么可能连下面那个循环 ...

是的呀,进不去怎么跳,第一个break在外面那个大的循环里啊,直接跳出去了,没有机会进第二个switch的
你这个程序跳的也是和他相关的for啊,那个break和他相关的就是第一个switch。哥们实在不信你去单步走一下,单步走到那个break的时候,下一步直接是printf了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 10:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表