如果语句在开关块中不起作用?



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

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 而不是错误的字符

有什么问题吗?

if语句在switch块中工作正常,您只是将其放在永远不会执行的地方。switch语句跳转到相应的case,这就是它的目的。无论它跳到什么,它都会跳过if,所以if永远不会执行。

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

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

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

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

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

好吧,你的if语句的位置并没有真正的意义。switch-语句跳转到相应的大小写然后存在,因此您的 if 语句不会被执行。而且我不建议使用 goto,因为它被认为是一种不好的做法。

最新更新