黑马程序员技术交流社区

标题: switch 语句的输出 [打印本页]

作者: hughwang90    时间: 2014-4-2 17:46
标题: switch 语句的输出
本帖最后由 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  ?


作者: conpgy    时间: 2014-4-2 17:57
这样写是错的。switch(表达式)。表达式不能为float
作者: agelessman    时间: 2014-4-2 18:06

main( )  
{
      float a=1.9;  
      switch(a)
      {
             case 0: printf("0000");   
             case 1: printf("1111");   
             case 2: printf("2222");   
      }
     printf("%f",a);  
}
switch里边没用break,就一直执行下去,最后的结果就是那个了
作者: haohaoxuexi    时间: 2014-4-2 18:26
main( )  
{
      float a=1.9;  
      switch(a)
      {
             case 0: printf("0000");   
             case 1: printf("1111");   
             case 2: printf("2222");   
      }
     printf("%f",a);  
}
你这里边缺少break;语句,或者添加一个default语句
作者: 愿我能    时间: 2014-4-2 18:59
主要因为没break ,case1,case2,都执行了,
作者: 墨迹的可乐    时间: 2014-4-2 19:09
缺少break语句,case语句会一直执行下去,需要加上break语句;同时我是将楼主的代码运行了一遍,但是总是显示错误,不知道怎么输出那个结果的

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

像楼上说的 如果缺少break    case就会顺序执行下去,不跳出。
作者: Jine    时间: 2014-4-2 21:11
float 是浮动小数点啊!,switch是需要整数输入,

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

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

还可以输出结果,大神膜拜你:dizzy:dizzy:dizzy:dizzy:dizzy:dizzy:
作者: 2014571245    时间: 2014-4-2 21:26
如果是顺序执行的话?为什么case 0;没有执行?而是从case1开始执行?
作者: 远人    时间: 2014-4-2 21:34
亲,你的这段代码漏洞百出。
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位小数。
  
作者: 王雪冬    时间: 2014-4-3 20:55
语法错了,缺少break。当满足一个条件时通常是需要跳出switch,而break就是干这个用的
作者: 曲佳奇    时间: 2014-4-3 20:58
好像switch中只能byte  short  char  int  吧  还有每个case之后要有break啊
作者: 诺忔。初禾、    时间: 2014-4-3 21:35
每个case结束后确实break




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2