免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3047 | 回复: 15
打印 上一主题 下一主题

关于case语句的一个问题,谁能解决? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-15 21:14 |只看该作者 |倒序浏览

  1. 在C语言中switch语句能够实现以下功能:
  2. int a=2;
  3. switch(a)
  4. {
  5.         case 1:
  6.                 printf("a == 1\n");
  7.         case 2:
  8.                 printf("a == 2\n");
  9.         case 3:
  10.                 printf("a == 3\n");
  11.         default:
  12.                 printf(" invalid value\n");
  13. }

  14. 结果如下:
  15. a == 2
  16. a == 3
  17. invalid value

  18. *************************************************************************

  19. 在shell程序中下面的程序只能打印一行,即只执行其中的一句指令:
  20. a=1
  21. case $a in
  22.         1) echo "a == 1";;
  23.         2) echo "a == 2";;
  24.         3) echo "a == 3";;
  25.         *) echo "invalid value"
  26. esca
  27. 结果如下:
  28. a == 1

  29. ************************************************************************
  30. 问题:
  31. 如何使shell程序像上面的c程序一样,完成同样的功能?
复制代码

论坛徽章:
0
2 [报告]
发表于 2004-04-15 21:31 |只看该作者

关于case语句的一个问题,谁能解决?

怎么看的不是很明白呀!你能再详细说一下吗??

论坛徽章:
0
3 [报告]
发表于 2004-04-15 21:40 |只看该作者

关于case语句的一个问题,谁能解决?

也就是怎样才能让上面的shell程序的输出结果为:
a==1
a==2
a==3
invalid value

论坛徽章:
0
4 [报告]
发表于 2004-04-15 22:36 |只看该作者

关于case语句的一个问题,谁能解决?

不行,shell毕竟和c不一样。实际上c的这个功能我一直认为很不好,会给程序员造成一定的困惑。

论坛徽章:
0
5 [报告]
发表于 2004-04-15 22:38 |只看该作者

关于case语句的一个问题,谁能解决?

找到解决办法:

  1. 以下思路来自“网中人”,在此表示感谢!

  2. #!/bin/sh

  3. Step=1

  4. do_cmd()
  5. {
  6.         case $1 in
  7.                 1) echo 1;;
  8.                 2) echo 2;;
  9.                 3) echo 3;;
  10.                 4) echo 4;;
  11.                 5) echo 5;;
  12.                 6) echo 6;;
  13.                 *) exit   1;;
  14.         esac
  15. }

  16. do_cmd $Step
  17. while [ $? -eq 0 ]
  18. do
  19.         Step=`expr $Step + 1`
  20.         do_cmd $Step
  21. done
  22. exit


  23. 以下思路来自“@龙井茶 ”,在此表示感谢!
  24. #!/bin/sh

  25. step=1
  26. while [ 1 ]
  27. do
  28.         case $step in
  29.                 1) echo 1;;
  30.                 2) echo 2;;
  31.                 3) echo 3;;
  32.                 4) echo 4;;
  33.                 5) echo 5;;
  34.                 6) echo 6;;
  35.                 *) exit   ;;
  36.         esac
  37.         if [ $? -eq 0 ]; then
  38.                 step=`expr $step + 1`
  39.         else
  40.                 echo "Error"
  41.         fi
  42. done

复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-04-16 09:16 |只看该作者

关于case语句的一个问题,谁能解决?

to parady:
不好意思,这个问题用case实现很别扭,我觉得我们的思路应该开阔一点,其实就这个例子而言,用几条简单的if语句就能解决呀,这样思路是不是更自然些呢?
如果假定i取值为1-6的整数:
  1. i=1
  2. if [ $i -eq 1 ];then
  3.   echo 1
  4. fi

  5. if [ $i -le 2 ];then
  6.   echo 2
  7. fi
  8. if [ $i -le 3 ];then
  9.   echo 3
  10. fi

  11. if [ $i -le 4 ];then
  12.   echo 4
  13. fi

  14. if [ $i -le 5 ];then
  15.   echo 5
  16. fi

  17. if [ $i -le 6 ];then
  18.   echo 6
  19. fi
复制代码


当然i的取值不为整数的情况下,上面的办法就行不通了。不过程序是人编的,我们或者可以将问题转化一下,就可以参考上面的代码了。

论坛徽章:
0
7 [报告]
发表于 2004-04-16 10:00 |只看该作者

关于case语句的一个问题,谁能解决?

学习

论坛徽章:
0
8 [报告]
发表于 2004-04-16 10:07 |只看该作者

关于case语句的一个问题,谁能解决?

楼主::
在C中,case语句应该有以break语句结束每个分支,才能显示正常的结果,所以你的C的结果是错误的!!
在shell中,";;"的作用是和break相同的作用!所以结果会和c不同,这个结果才是正确的!!
假设你想要的结果就是如此,那么,在SHELL中去除";;"试试看!!


我是新手,有什么不对的,请GGJJ们指正!!

论坛徽章:
0
9 [报告]
发表于 2004-04-16 13:48 |只看该作者

关于case语句的一个问题,谁能解决?

好贴!长知识!

论坛徽章:
0
10 [报告]
发表于 2004-04-16 16:20 |只看该作者

关于case语句的一个问题,谁能解决?

原帖由 "ifoolyou" 发表:

在C中,case语句应该有以break语句结束每个分支,才能显示正常的结果,所以你的C的结果是错误的!!

c语言本身提供这样的功能,很多程序员也充分利用了这样的特性,这并不能说这么用有什么错误,只是这种使用方法经常会给看程序的人造成困惑而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP