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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李志祥 中级黑马   /  2012-3-27 11:26  /  2520 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李志祥 于 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();

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

7 个回复

倒序浏览
if (flag == false)而不是if (flag = false)!!

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
许全通 发表于 2012-3-27 11:42
if (flag == false)而不是if (flag = false)!!

if (flag == false) //这点中间“用的是==”,而不是“=”,一直在这里犯错误。
兄弟能否,解释下为什么啊
菜鸟,求教
多谢

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
= 是赋值,==是判断两边的值是否相等然后返回一个bool值。
if 语句它会根据小括号中的表达式所返回的bool值来判断是否执行大括号中的代码。
所以要用==。

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
柏云杉 发表于 2012-3-27 12:13
= 是赋值,==是判断两边的值是否相等然后返回一个bool值。
if 语句它会根据小括号中的表达式所返回的bool值 ...

恩,多谢,明白了
回复 使用道具 举报
   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中的代码块。
因此出现了你所说的情况

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你有两个地方错了:
一、switch里面只能是整型,char型也可以,你用字符串当然错误了。
二、 if (flag = false)也是错误的,正确的写法是 if (flag == false) !

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
帅哥,如图:


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

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马