c中switch语句中的多个变量

Kas*_*hif 3 c c# c++

如何在c中使用switch语句在c中编写以下语句

int i = 10;
int j = 20;

    if (i == 10 && j == 20)
    {
       Mymethod();
    }
    else if (i == 100 && j == 200)
    {
       Yourmethod();
    }
    else if (i == 1000 || j == 2000) // OR
    {
       Anymethod();
    }
Run Code Online (Sandbox Code Playgroud)

编辑:

我已将最后一个案例从'和'更改为'或'以后.所以我在编辑之前向那些回答我的问题的人道歉.

例如,这种情况,我只是想知道它是否可能.我有谷歌这个,发现它是不可能的,但我更信任stackoverflow上的大师.

谢谢

Mic*_*urr 6

你正在迫切寻找那些不自然地迫使这些代码进入的答案switch- 对于你所描述的问题,这不是C,C++或C#中的正确方法.与if语句一起使用,因为switch在这种情况下使用a 会导致代码不太可能,并且可能导致错误引入错误.

有些语言会评估switch类似于语句序列的语句语法if,但C,C++和C#不在其中.


在Jon Skeet评论说" 尝试使其发挥作用有趣"之后,我将违背我的初步判断并继续发挥作用,因为人们可以通过尝试替代方案来了解它们的工作原理以及它们的位置.不工作.希望我不会最终混淆事情而不是......

所考虑的语言中switch语句的目标必须是常量 - 它们不是在运行时计算的表达式.但是,如果您可以将要作为切换目标的条件映射到散列函数,您将可能获得类似于您正在查找的行为,该散列函数将生成与条件匹配的完美散列.如果可以这样做,您可以调用哈希函数并打开它产生的值.

当您想要打开字符串值时,C#编译器会自动为您执行类似的操作.在C中,当我想要打开字符串时,我手动完成了类似的操作.我将目标字符串与用于标识字符串的枚举放在一个表中,然后我打开枚举:

char* cmdString = "copystuff";  // a string with a command identifier, 
                                //   maybe obtained from console input

StrLookupValueStruct CmdStringTable[] = {
    { "liststuff", CMD_LIST },
    { "docalcs",   CMD_CALC },
    { "copystuff", CMD_COPY },
    { "delete",    CMD_DELETE },
    { NULL,        CMD_UNKNOWN },
};

int cmdId = strLookupValue( cmdString, CmdStringTable); // transform the string 
                                                        //    into an enum

switch (cmdId) {
    case CMD_LIST:
        doList();
        break;

    case CMD_CALC:
        doCalc();
        break;

    case CMD_COPY:
        doCopy();
        break;

    // etc...    
}
Run Code Online (Sandbox Code Playgroud)

而不必使用一系列if语句:

if (strcmp( cmdString, "liststuff") == 0) {
    doList();
}
else if (strcmp( cmdString, "docalcs") == 0)  {
    doCalc();
}
else if (strcmp( cmdString, "copystuff") == 0) {
    doCopy();
}
// etc....
Run Code Online (Sandbox Code Playgroud)

顺便说一下,对于字符串到函数的映射,我个人发现表查找/切换语句组合更具可读性,但我想有些人可能更喜欢if序列的更直接的方法.

您在问题中使用的表达式集看起来并不是特别简单 - 您的哈希函数几乎肯定会成为一系列if语句 - 您基本上只是将构造移动到其他位置.Jon Skeet的原始答案主要是将表达式转换为哈希值,但当or操作被抛入其中一个测试的混合时,哈希函数就会崩溃.