关于switch case语句的问题

就是说如果一些内容很难归类,就是说用case归纳不全,比如1000-2000之内打9折,我总不可能case1111 case1112这样一条一条归类过去吧,这怎么设置啊?!

#include <iostream>
using namespace std;
int main()
{
    double Hour,PayPer,Pay;
    do
    {
        cout<<"输入工作时数及单位时间基本工资:";
        cin>>Hour>>PayPer;
        bool f1=(Hour>40);
        bool f2=(Hour>50);
        switch(f1)
        {
            case 0:
            Pay=Hour*PayPer;
            cout<<"输出:"<<Pay<<endl;
            break;
            case 1:
            switch(f2)
            {
            case 0:
                    Pay=40*PayPer+(Hour-40)*1.5*PayPer;
                    cout<<"输出:"<<Pay<<endl;
                    break;
            case 1:
                    Pay=40*PayPer+10*1.5*PayPer+(Hour-50)*3*PayPer;
                    cout<<"输出:"<<Pay<<endl;
                    break;
            }
            break;
        }
    }while(Hour!=0&&PayPer!=0);
    return 0;
}
参考我的这个代码,题目在
http://zhidao.baidu.com/question/494793277752591964.html?oldq=1
满意记得采纳哦!

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-01-12
错误是:每个case
语句必须包含一个常量表达式做其变量,这个值不能在switch
语句的各级中出现
多次
意思是switch()
{
case(a);
case(b);
}
a和b的值不能相等,15||-3||12结果为真(即为1)-15||3||-12结果为真(即为1),两个1重复了,所以报错。建议改为
switch
(b)
{
case
(15):
{cout<<"
The
winner
is
player1!";
break;}
case
(-3):
{cout<<"
The
winner
is
player1!";
break;}
case
(12):
{cout<<"
The
winner
is
player1!";
break;}
case
(-15):
{cout<<"The
winner
is
player2!";
break;}
case
(3):
{cout<<"The
winner
is
player2!";
break;}
case
(-12):
{cout<<"The
winner
is
player2!";
break;}
default:
cout<<"Both
of
you
are
winners!";
}
第2个回答  推荐于2017-11-26
确实不行。编译器报错(case label does not reduce to an integer constant)

如果硬要用switch-case,只能另外设定一个变量b, 当a在[1000,2000]区间里面的时候赋值b=1;
if(a<=2000 && a>=1000)b=1;

switch(b)
case 1: p=p*0.9;

case 2: ............;

.........
.........本回答被提问者采纳
第3个回答  2013-10-20
int n;
float price;
if (1000<price&&price<2000) n=4;
这种方式来设置
第4个回答  2018-01-10
case 1000 ... 2000 : 解决

关于switch-case语句是否需要加花括号
在编写C++代码时,若遇到错误提示:“不能从switch语句跳转到此case标签”,可能是因为switch-case结构中的case标签后未加花括号。通常情况下,switch-case语句中的case标签后无需加花括号,除非在case语句中声明了变量。此规则旨在提升代码可读性与清晰度,避免作用域不清可能导致的逻辑问题。不使用花括号...

switch语句中case后面的表达式可以是什么?
switch语句中case后面的表达式可以是常量表达式。C语言中switch语句的case后面不能是一个关系表达式,case后面跟的是一个常量表达式,CASE表达式的真假值判断就会中止,而剩余的 WHEN子句会被忽略。使用注意事项:要注意CASE表达式里各个分支返回的数据类型是否一致。某个分支返回字符型,而其他分支返回数值型的...

C语言中switch case的问题
switch语句的格式为:switch(条件)语句 其中,条件的类型可以是整数类型,枚举类型,或者类类型(但该类需要有单一的转换到整数类型或(可以是字符类型,但不能是浮点类型、字符串、指针类型等),语句部分不一定非得是一条复合语句。

关于switch case语句的问题
确实不行。编译器报错(case label does not reduce to an integer constant)如果硬要用switch-case,只能另外设定一个变量b, 当a在[1000,2000]区间里面的时候赋值b=1;if(a<=2000 && a>=1000)b=1;switch(b)case 1: p=p*0.9;case 2: ...;......

C语言中switch case语句的问题
switch(g){ case 0:printf("奖金总数k=%d\\n", a);break;case 1:printf("奖金总数k=%d\\n", a + b);break;case 2:case 3:printf("奖金总数k=%d\\n", a + b + c);break;case 4:case 5:printf("奖金总数k=%d\\n", a + b + c + d);break;case 6:case 7:case 8:case 9...

希望大神帮我解答关于switch( ){case :}的一些问题。
因为先执行i=1,case 1后空,无break语句,所以就一直做下去,两次k++后,k=2第二题 题目2#include<stdio.h>int main(){int i,m=0;for(i=0;i<5;i++) {switch(i) {case 0: case 1:m++; case 3:m++; case 4:m--;break;}}printf("%d\\n",m);return 0;} 根据i...

java,switch语句中case的疑问
你要记住一点就好:switch case 还要配合break使用。如果不break,那就会继续执行下面的,因为存在这样的需求。

switch语句中的case能否为0?
不可以,C语言中的switch case中的case后面仅可以跟整形常量或常量表达式。原因:如果case后面跟 100>x>50是会出现逻辑错误的。首先C语言中像100>x>50这种表达式的意义并不和数学里的一样表示x落在(50,100)这个区间。这个在C语言中100>x会先被计算得到真或假。直接用关系运算得到的真和假在C语言...

关于switch case 语句的一个问题···
错误是:每个case 语句必须包含一个常量表达式做其变量,这个值不能在switch 语句的各级中出现 多次 意思是switch(){ case(a);case(b);} a和b的值不能相等,15||-3||12结果为真(即为1)-15||3||-12结果为真(即为1),两个1重复了,所以报错。建议改为 switch (b) { case (15):{...

switch 中case的条件问题!
基本的C语言语法问题。switch()内的表达式必须有一个定值 case后面只能是表达式的一个定值,不能指定范围。如果想要实现以上 可以使用if(i>40 && i<46)语句。

相似回答