| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 575 人关注过本帖
标题:继续小小C问题!
只看楼主 加入收藏
周云
Rank: 1
等 级:新手上路
帖 子:46
专家分:2
注 册:2012-9-1
结帖率:76.92%
收藏
已结贴  问题点数:5 回复次数:8 
继续小小C问题!
#include<stdio.h>
main()
{
    int s;
    scanf("%d",&s);
    while(s>0)
    {
        switch(s)
        {
        case 1:printf("%d",s+5);
        case 2:printf("%d",s+4);break;
        case 3:printf("%d",s+3);
        default:printf("%d",s+1);break;
        
        
        }
    scanf("%d",&s);
     }
}
当输入1 2 3 4 5 0时,输出是6566456,我不懂这是怎么来的!看了解析还是不懂!求解!




搜索更多相关主题的帖子: default 
2012-09-15 21:00
阿鞠尼
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:首尔
等 级:蒙面侠
威 望:5
帖 子:1467
专家分:4442
注 册:2012-5-30
收藏
得分:5 
当s为1时
进入switch
满足case1   输出   6
由于没有遇见break
继续往下执行
满足case2   输出   5
遇到break跳出switch

当s为2时
满足case2   输出   6
遇到break跳出switch



再往下  我就不多说了
哦 忘了 说一句 如果都不满足 直接执行default后面的语句

[ 本帖最后由 阿鞠尼 于 2012-9-15 21:25 编辑 ]

喜欢睡觉 却经常熬夜
2012-09-15 21:24
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:0 
你得看懂switch(s),当s与case x中的x值相等时,就执行这一句....如果没有break....则会往下执行下去....直到遇到break或者执行完所有语句,然后跳出switch().....
2012-09-15 21:43
飘青
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2012-7-8
收藏
得分:0 
理由很简单
当输入1 2 3 4 5 0时,输出是6566456,我不懂这是怎么来的!看了解析还是不懂!求解!
你输入的 不是一个值 而是6个值  你只有个变量不能同时存在六个值。 scanf 函数把空格 tab enter 键当做输入的分隔符。

2012-09-15 21:44
翼碎
Rank: 1
等 级:新手上路
帖 子:23
专家分:7
注 册:2012-9-5
收藏
得分:0 
switch case的时候如果没有遇到break的时候则会继续执行下去直到遇到break的时候或者结束
2012-09-15 22:09
胡振杰
Rank: 2
等 级:论坛游民
帖 子:41
专家分:63
注 册:2012-9-14
收藏
得分:0 
同二楼。加油吧、少年!!!
2012-09-15 22:22
xtjopt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:168
注 册:2012-9-12
收藏
得分:0 
先解释scanf(%d,&s)
由于你输入的是 1 2 3 4 5 0
%d是要求输入数字 可以由空格 Tab 回车等作为分隔符,
所以s取到的值就为1;多余的值会保留 并分配到下一个scanf 语句中
while((s=1)>0) 条件成立 进入switch((s=1))
其中的break是跳出switch语句;如果没有执行break语句的话,则会执行下一条case后的语句
case 1: 是判断其后跟着的表达式是否与switch(s)中的变量s相同
default: 是除了以上的case结果外 其他的都执行其后的语句
如果相同则执行改case 后的语句
s=1 满足 case 1: 执行其后语句 printf("%d",s+5) 输出6  设屏幕显示结果为变量 str=6
无break不跳出switch继续执行 case 2中的语句printf("%d",s+4)输出5; str=65   
遇break跳出循环;
scanf("%d",&s);取到上次保留的数值 2 3 4 5 0中的2, s=2;
while((s=2)>0) 满足条件继续执行
case 1:不成立跳过
case 2:成立 输出6  str=656   break跳出循环
s=3
while(3>0)条件成立
case 1:
case 2:
不成立跳过
case 3: 成立 输出6 str=6566     无break继续
default: 输出4 str=65664

s=4
while(4>0)
default:输出 5 str=656645

while(5>0)
default:输出 6 str=6566456

whle(0>0) 不成立
程序结束屏幕上的结果为 6566456









2012-09-15 22:27
ansidven
Rank: 1
等 级:新手上路
帖 子:20
专家分:1
注 册:2012-9-17
收藏
得分:0 
switch  语句,当你遇到break语句的时候才会跳出循环,所以,当你输入1,结果是65,break执行后跳出switch语句的,执行while语句,当你输入2,结果是6,当你输入3的时候结果又是2个,64,遇到break,跳出switch,执行while语句,以此类推,当你输入4和5的时候,case没有值,但是他又是满足while的,所以执行default命令,直到0,不满足while,跳出while循环,结束。
2012-09-18 10:12
db20103548
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:9
专家分:11
注 册:2012-9-16
收藏
得分:0 
#include<stdio.h>
main()
{
    int s;
    scanf("%d",&s);
    while(s>0)
    {      
        switch(s)
        {
        case 1:
            printf("s1+5 =%d ",s+5);
        case 2:
            printf("s2+4 =%d ",s+4);break;
        case 3:
            printf("s3+3 =%d ",s+3);
        default:
            printf("s4+1 =%d ",s+1);break;      
        }
        scanf("%d",&s);
     }
}
图片附件: 游客没有浏览图片的权限,请 登录注册

2012-09-18 11:49
快速回复:继续小小C问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018225 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved