A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hughwang90 中级黑马   /  2014-4-2 17:46  /  2811 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hughwang90 于 2014-4-2 21:47 编辑

main( )  
{
      float a=1.9;  
      switch(a)
      {
             case 0: printf("0000");   
             case 1: printf("1111");   
             case 2: printf("2222");   
      }
     printf("%f",a);  
}

请问这一个程序输出地结果为什么会是  11122221.900000  ?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

12 个回复

倒序浏览
这样写是错的。switch(表达式)。表达式不能为float

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报

main( )  
{
      float a=1.9;  
      switch(a)
      {
             case 0: printf("0000");   
             case 1: printf("1111");   
             case 2: printf("2222");   
      }
     printf("%f",a);  
}
switch里边没用break,就一直执行下去,最后的结果就是那个了

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
main( )  
{
      float a=1.9;  
      switch(a)
      {
             case 0: printf("0000");   
             case 1: printf("1111");   
             case 2: printf("2222");   
      }
     printf("%f",a);  
}
你这里边缺少break;语句,或者添加一个default语句

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
主要因为没break ,case1,case2,都执行了,
回复 使用道具 举报
缺少break语句,case语句会一直执行下去,需要加上break语句;同时我是将楼主的代码运行了一遍,但是总是显示错误,不知道怎么输出那个结果的

错误提示:
01-switch1.c:5:5: error: statement requires expression of integer type
      ('float' invalid)
    switch(a)
    ^      ~
1 error generated.
回复 使用道具 举报
你看你定义的浮点型float 的变量a     switch(变量)  这里面的变量不能够用float类型 ,如果用float类型会报错。
你可以把它换成char 或者int类型  修改下试一下

像楼上说的 如果缺少break    case就会顺序执行下去,不跳出。
回复 使用道具 举报
Jine 中级黑马 2014-4-2 21:11:43
8#
float 是浮动小数点啊!,switch是需要整数输入,

a=1.9是小数,而且条件没有break来结束啊!

你的笔记本真是神啊,竟然可以编译成功,

还可以输出结果,大神膜拜你:dizzy:dizzy:dizzy:dizzy:dizzy:dizzy:
回复 使用道具 举报
如果是顺序执行的话?为什么case 0;没有执行?而是从case1开始执行?
回复 使用道具 举报
亲,你的这段代码漏洞百出。
1、main函数不完整,修改后
  int main()
  {
        
        return 0;
  }
2、浮点型数据写法。
  1.>double型   double a = 1.3
  2.>float型  float a = 1.3f  (float型书写后面要加f的,double不加,这是double和float的区别)
3.缺少break;语句,和default语句
4.最后按照你的函数给你解释下结果为什么是11122221.900000,当然你这个程序要能运行的前提下
   a被系统强制转化为int型执行,转化之后a=1,那么switch语句中
          case 1: printf("1111");   
          case 2: printf("2222");   
           }
          printf("%f",a);
  这3句被执行,其中你没有分行符'\n',所以输出结果连在一起,同时%f默认的是保留6位小数。
  

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
语法错了,缺少break。当满足一个条件时通常是需要跳出switch,而break就是干这个用的
回复 使用道具 举报
好像switch中只能byte  short  char  int  吧  还有每个case之后要有break啊
回复 使用道具 举报
每个case结束后确实break
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马