黑马程序员技术交流社区

标题: switch [打印本页]

作者: 李志祥    时间: 2012-3-27 11:26
标题: switch
本帖最后由 李志祥 于 2012-3-27 12:20 编辑


     
      
程序如下,我看和老师的仔细对过了可是怎么就是出错误啊,结果如图,输入A,B,C,D,E时候怎么不会输出张三的工资是多少呢,输错的话程序运行正确,无解中,求教!多谢

       Console.WriteLine("输入对张三的评级(A—E)");
            string input = Console.ReadLine();
            decimal salary = 5000m;
            bool flag = false;
            switch (input)
            {
                case "A":
                    salary += 500;
                    break;
                case "B":
                    salary += 200;
                    break;
                case "C":
                    break;
                case "D":
                    salary -= 200;
                    break;
                case "E":
                    salary -= 500;
                    break;
                default:
                    Console.WriteLine("您的输入有问题");
                    flag = true;
                    break;
             }
            if (flag = false)
            {
                Console.WriteLine("张三的工资是" + salary);
            }
         
            Console.ReadKey();


作者: 许全通    时间: 2012-3-27 11:42
if (flag == false)而不是if (flag = false)!!
作者: 李志祥    时间: 2012-3-27 11:54
许全通 发表于 2012-3-27 11:42
if (flag == false)而不是if (flag = false)!!

if (flag == false) //这点中间“用的是==”,而不是“=”,一直在这里犯错误。
兄弟能否,解释下为什么啊
菜鸟,求教
多谢
作者: 柏云杉    时间: 2012-3-27 12:13
= 是赋值,==是判断两边的值是否相等然后返回一个bool值。
if 语句它会根据小括号中的表达式所返回的bool值来判断是否执行大括号中的代码。
所以要用==。

作者: 李志祥    时间: 2012-3-27 12:19
柏云杉 发表于 2012-3-27 12:13
= 是赋值,==是判断两边的值是否相等然后返回一个bool值。
if 语句它会根据小括号中的表达式所返回的bool值 ...

恩,多谢,明白了
作者: 张恒    时间: 2012-3-27 12:25
   switch (input)
            {
                case "A":
                    salary += 500;
                    break;
                case "B":
                    salary += 200;
                    break;
                case "C":
                    break;
                case "D":
                    salary -= 200;
                    break;
                case "E":
                    salary -= 500;
                    break;
                default:
                    Console.WriteLine("您的输入有问题");
                    flag = true;
                    break;
             }
            if (flag = false)
            {
                Console.WriteLine("张三的工资是" + salary);
            }
当你输入后,switch会匹配对应的case,没有匹配到,则执行default中的代码块。
因为你输入了正确的匹配值,对应的case中的代码执行。但你没有看到输出结果。但也没有报错。
是因为if(flag=false) 在编译这句代码的时候把flag=false解析为给flag变量赋值,再做if判断。所以不会报错,if 中的条件是false,所以不会执行if中的代码块。
因此出现了你所说的情况
作者: 张学良    时间: 2012-3-27 12:35
你有两个地方错了:
一、switch里面只能是整型,char型也可以,你用字符串当然错误了。
二、 if (flag = false)也是错误的,正确的写法是 if (flag == false) !
作者: 孙树迁    时间: 2012-3-27 12:53
帅哥,如图:


你在程序中,把鼠标放在那个绿色的横线上,就会出来提示,





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