如果语句在交换机块中不起作用?

时间:2017-03-06 08:08:27

标签: c++

我写了一个简单的函数如下,但它没有按预期工作,在C ++中, if 语句在 switch 的块中不起作用?

void any2ten(string origin, int type)
{
    if(! (type == 2 || type == 8 || type == 16))
    {
        cout << "unsupport this " << endl;
        return;
    }

    int result = 0;

   for (int index = 0; index < origin.length(); index++)
    {
        int tmp = 0;
        switch (origin[index])
        {
            if (type == 16) 
            {
            case 'F':
            case 'f':
                tmp = 15 * pow(type, index); break;
            case 'E':
            case 'e':
                tmp = 14 * pow(type, index); break;
            case 'D':
            case 'd':
                tmp = 13 * pow(type, index); break;
            case 'C':
            case 'c':
                tmp = 12 * pow(type, index); break;
            case 'B':
            case 'b':
                tmp = 11 * pow(type, index); break;
            case 'A':
            case 'a':
                tmp = 10 * pow(type, index); break;
            case '9':
                tmp = 9 * pow(type, index); break;
            case '8':
                tmp = 8 * pow(type, index); break;
        }
        if (type == 8 || type == 16) 
        {
            case '7':
                tmp = 7 * pow(type, index); break;
            case '6':
                tmp = 6 * pow(type, index); break;
            case '5':
                tmp = 5 * pow(type, index); break;
            case '4':
                tmp = 4 * pow(type, index); break;
            case '3':
                tmp = 3 * pow(type, index); break;
            case '2':
                tmp = 2 * pow(type, index); break;
        }
    case '1':
        tmp =  1 * pow(type, index); break;
    case '0':
        tmp =  0; break;

    default:
        cout << "wrong character has got" << endl;
        return;
        break;
    }
    result += tmp;
  }
  cout << result << endl;
}

当我将该函数测试为 any2ten(“aa”,8)时,结果是90而不是错误的字符

有什么不对吗?

3 个答案:

答案 0 :(得分:4)

if语句在switch的块中正常工作,您只需将其置于永不执行的位置即可。 switch语句跳转到相应的case,这就是它的目的。无论它跳转到什么,它都会跳过if,因此if永远不会执行。

如果您要添加代码以便可以跳转到switchif之间,那么if将正常执行。您可以使用任何类型的循环或goto来执行此操作。

仅当 default匹配时才会case。否则,switch会跳转到匹配的case

答案 1 :(得分:2)

switch语句不能像你想象的那样工作。它的行为方式不能代替if - else if - else,而是有所不同。

遇到switch后,进程将跳转到正确case之后的代码。这意味着您实际上完全跳过了放置在那里的if的执行。

是的,它确实看起来很奇怪,因为你假设因为你有花括号,你必须执行if条件或根本不进入它们,但事实并非如此。

答案 2 :(得分:0)

你的if语句的位置确实没有意义。 switch语句跳转到相应的case然后存在,因此你的if语句不会被执行。我不建议使用goto,因为它被认为是一种不好的做法。