在switch case语句中,它表示"重复案例值"出现错误.谁知道为什么?

Vic*_*ard 4 c++ dev-c++ switch-statement

我正在研究一个石头剪刀程序,但这次计算机选择摇滚一半时间,剪刀三分之一时间,纸张只有六分之一时间.我这样做的方式是我列举了六种可能的计算机选择值:

enum choicec {rock1, rock2, rock3, scissors1, scissors2, paper};
choicec computer;
Run Code Online (Sandbox Code Playgroud)

但是,在计算机做出选择之后,我必须将这些枚举值转换为摇滚,纸张或剪刀.我使用switch-case语句做到了这一点:

switch(computer) {
        case rock1 || rock2 || rock3:
            c = 1;
            break;
        case scissors1 || scissors2: //ERROR!
            c = 3;
            break;
        case paper:
            c = 2;
            break;
    }
Run Code Online (Sandbox Code Playgroud)

一个是摇滚,两个是纸,三个是剪刀.但是,在我作为注释写入错误的行上,它给了我这个错误:[错误]重复的案例值.

我不知道为什么.有任何想法吗?

Moo*_*uck 7

你不能||case分支机构中使用.对不起:(
当你使用||它的逻辑或在他们身上,上面写着"是rock1rock2rock3不是零?"答案是肯定的,那些至少一个不为零,所以rock1 || rock2 || rock3就是true,这是1,而且scissors1 || scissorstrue,那是1.所以你有两个case分支机构1.

您应该只使用casefallthrough来选择多个条件:

switch(computer) {
    case rock1: case rock2: case rock3:
        c = 1;
        break;
    case scissors1: case scissors2:
        c = 3;
        break;
    case paper:
        c = 2;
        break;
    default:
        std::cerr << "INVALID COMPUTER MOVE";
}
Run Code Online (Sandbox Code Playgroud)

另外,我的case开关总是有一个默认值.有时会发生错误,我们肯定想知道它是否没有遇到任何案例分支.我对于缺少else陈述也很偏执,但是如果没有陈述,大约有一半的时间是可以的else.


aah*_*134 5

我不确定您在做什么,但switch语句应如下所示

switch(computer) 
{
    case rock1:
    case rock2:
    case rock3:
        c = 1;
        break;
    case scissors1:
    case scissors2:
        c = 3;
        break;
    case paper:
        c = 2;
        break;
}
Run Code Online (Sandbox Code Playgroud)