我写了一个简单的函数如下,但它没有按预期工作,在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而不是错误的字符。
有什么不对吗?
答案 0 :(得分:4)
if
语句在switch
的块中正常工作,您只需将其置于永不执行的位置即可。 switch
语句跳转到相应的case
,这就是它的目的。无论它跳转到什么,它都会跳过if
,因此if
永远不会执行。
如果您要添加代码以便可以跳转到switch
和if
之间,那么if
将正常执行。您可以使用任何类型的循环或goto
来执行此操作。
仅当否 default
匹配时才会case
。否则,switch
会跳转到匹配的case
。
答案 1 :(得分:2)
switch
语句不能像你想象的那样工作。它的行为方式不能代替if
- else if
- else
,而是有所不同。
遇到switch
后,进程将跳转到正确case
之后的代码。这意味着您实际上完全跳过了放置在那里的if
的执行。
是的,它确实看起来很奇怪,因为你假设因为你有花括号,你必须执行if
条件或根本不进入它们,但事实并非如此。
答案 2 :(得分:0)
你的if语句的位置确实没有意义。 switch语句跳转到相应的case然后存在,因此你的if语句不会被执行。我不建议使用goto,因为它被认为是一种不好的做法。