我有一个问题。我正在为考试而学习,我不知道该怎么做。基本上,我必须将if ... else if ... else否则的指令更改为指令开关,以使程序的输出保持不变。
void main()
{
int x;
x = 1;
for (int i = 1; i < 10; ++i) {
if (i <= 3)
do {
x += i;
if (x >= 4)
break;
} while (i % 2 == 0);
else if ((i > 3) && (i < 5))
x += 2;
else
continue;
}
while (x > 0) {
printf(" x=%d ", x);
x -= 1;
}
system("pause");
}
我可以在for循环内进行切换吗?
答案 0 :(得分:5)
当然可以。 for
循环控制语句的执行,而switch
块是的声明。
鉴于i
在1到9的范围内,可以将if
块替换为
switch (i){
case 1: case 2: case 3:
// that replaces 'if (i <= 3)'
// ToDo - the code here
break; // to obviate follow-through.
case 4:
// that replaces 'if ((i > 3) && (i < 5))'
// ToDo - the code here
break;
default:
// that replaces 'else'
continue; // note that this is for the for loop, not the switch
}
请注意,此重构不会更改if (x >= 4) break;
的行为。
但是我不认为用if
替换switch
块是正确的做法:边界i <= 3
和i >= 5
的处理不太自然switch
;也许将i
的类型更改为unsigned
并显式处理case 0:
会有所缓解。
答案 1 :(得分:2)
类似的事情应该起作用
void main()
{
int x;
x = 1;
for (int i = 1; i < 10; ++i) {
switch (i) {
case 1:
case 2:
case 3:
do {
x += i;
if (x >= 4)
break;
} while (i % 2 == 0);
break;
case 4:
x += 2;
break;
default:
continue;
break;
}
}
while (x > 0) {
printf(" x=%d ", x);
x -= 1;
}
system("pause");
}
答案 2 :(得分:0)
您可以在循环内部使用switch语句。
IMO switch
比长if else
序列更具可读性。性能几乎相同。
某些编译器(例如gcc)具有开关扩展名,从而使switch语句中的范围检查更短。
switch(age)
{
case 0 ... 12:
printf("Child\n");
break;
case 13 ... 19:
printf("Teenager\n");
break;
case 20 ... 200:
printf("Adult\n");
break;
default:
printf("Immortal\n");
break;
}
它当然不是便携式的。