| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4659 人关注过本帖
标题:switch语句问题
只看楼主 加入收藏
意林林
Rank: 1
等 级:新手上路
帖 子:10
专家分:6
注 册:2015-12-29
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:12 
switch语句问题
有以下程序
main( )
{  char k;   int   i;
   for(i=1;i<3;i++)
     {  scanf("%c",&k);
        switch(k)
          {  case '0':  printf("another\n");
             case '1':  printf("number\n");
           }
      }
}
程序运行时,从键盘输入:01<回车>,程序执行后的输出结果是()
A) another       B)another           C)another        D)number
   number          number              number           number
                   another             number
case ‘0’这个不是应该是字符0吗?但是输入的是数字0啊?如何分析这道题?
搜索更多相关主题的帖子: another number 键盘 
2016-01-18 20:56
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:10 
不懂你上面写的输出结果是什么,排的也乱,看不来,说一下程序怎么走吧,第一次循环时,你输入了01,这是两个字符,k只接收一个,剩下的还缓存的输入流中,第二次循环时不用你读入了,1会被读入给k,直接进行下一步,那结果是:第一次,k='0',符合第一个,打印another并换行,继续执行case '1'后面的,打印number并换行(因为你缺少continue语句来退出本次循环),一次循环结束,第二次开始了,k直接有值了,就是之前缓存的'1',这时case '0'不符,符合下面一行,所以会打印number并换行。之后就结束了,所以输出结果应该是:
another
number
number
按任意键结束,是不是这样?

[此贴子已经被作者于2016-1-19 09:21编辑过]

2016-01-19 09:18
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:4 
还有,你输入的是0,就能说是数字了嘛?电脑可不知道你是这意思,它按照指示把输入读入了char型变量, 那就是字符了
2016-01-19 09:24
hliu0129
Rank: 1
等 级:新手上路
帖 子:8
专家分:4
注 册:2014-4-23
收藏
得分:4 
在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。所以每个case 语句结束加一个break
2016-01-19 11:52
小明在华科
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2015-4-13
收藏
得分:2 
就是一个switch语句的用法,一般在每句后面加一个break跳出,不然后面的语句都会顺序执行,

再就是int 型变量和char型变量是可以转换的,建议去看看。
2016-01-19 14:22
ali123654
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2015-3-16
收藏
得分:0 
回复 2楼 wengbin
可是如果运行程序时,只输入0,结果会是another number,而如果只输入数字1时,只会输出number,没有进行第二次循环,这该怎么理解?
2016-01-19 17:27
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:0 
程序代码:
#include<stdio.h>
int main()
{   char k;
    int i;
    for(i=1;i!=3;i++)
    {
        printf("k #%d:",i);
        scanf("%c",&k);//问题出在这里,第二次是有进行循环的,只是你原代码没表现出来,用我这个来跑是能看出来问题的,问题就是第二次循环时,没让你读入k的新值,而被赋了空,结果是在你那什么也不做,在我这填加了default语句里就走了default语句。怎么会这样我还不清楚,解决办法倒是有:换一种循环方式-----------原来这,第二次的k已经是第一次输入时带的回车符了
        printf("\n");
        switch(k)
        {
            case '0':  printf("another\n");break;
            case '1':  printf("number\n");break;
            default:printf("down\n");
        }
        printf("k:%c\n",k);
    }
    return 0;
}


[此贴子已经被作者于2016-1-20 09:32编辑过]

2016-01-19 17:55
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:0 
程序代码:
#include<stdio.h>//这个就能正确的跑完,呃,我懂了,switch()语句中,条件语句的值必须是int型的,就是说k得是int型的才行
int main()
{   int k;
    int i;
    for(i=1;i!=3;i++)
    {
        printf("k #%d:",i);
        scanf("%d",&k);
        printf("\n");
        switch(k)
        {
            case 0:  printf("another\n");break;
            case 1:  printf("number\n");break;
            default:printf("down\n");
        }
        printf("k:%d   i:%d\n",k,i);
    }
    return 0;
}
2016-01-19 18:02
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:0 
c中对switch语句的通用格式说明里就有
程序代码:
switch(integer-expression)//很明确,括号里得是整形表达式------------//这里说法有问题,int型和char型都可以,还可以是bool型
{
    case label1:statement(s)
    case label2:statement(s)
    case label3:statement(s)
    ...
    default:statement(s)
}


[此贴子已经被作者于2016-1-20 09:30编辑过]

2016-01-19 18:05
ali123654
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2015-3-16
收藏
得分:0 
回复 10楼 wengbin
那如果给定的输入是字符型会出现什么状况?
2016-01-19 21:31
快速回复:switch语句问题
数据加载中...
 
   



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

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