在C ++中切换语句行为
我无法理解我的C ++ switch语句。
我必须输入两次可接受的整数间隔才能返回到开关。 然后它直接通过案例2。
继承的类:
class Fugl : public DyrLuft
{
private:
int alder;
public:
Fugl() : DyrLuft()
{ }
void les()
{
do
{
cout << "nSkriv inn fuglens alder: ";
cin >> alder;
if(alder < 0 || alder > 130)
cout << "nDenne alderen virket usannsynlig, prøv igjen!n";
} while(alder < 0 || alder > 130);
}
};
主要:
int main()
{
char valg = 'q';
cout << "Hvilken dyreart ønsker du å registrere? (Q for å avslutte)"
<< "n1) - Fugl n2) - Fisk n3) - Insekt n4) - Skalldyrn";
do
{
cin >> valg;
switch(valg)
{
case '1':
{
Fugl fugl; fugl.les();
} break;
case '2':
{
Fisk fisk; fisk.les();
} break;
case '3':
{
Insekt insekt; insekt.les();
} break;
case '4':
{
Skalldyr skalldyr; skalldyr.les();
} break;
case 'Q': return 0;
case 'q': return 0;
default: cout << "Velg en av ovennevnte!n";
}
} while(valg != 'Q' || valg != 'q');
return 0;
}
我不知道你的情况发生了什么,但是我运行了你的代码,它对我来说工作得很好。 输入1,4,Q和程序退出预期....可能是一个编译器或DyrLuft类问题(我只是删除了继承,使其工作,也来自案件2,3,4行)。
你有:
case '1':
{
Fugl fugl; fugl.les();
} break;
当你运行这个时,你创建一个Fug1对象,然后调用les()
函数。 当您在les()
输入适当的年龄时,函数将返回。 自break;
以来break;
在case块之外,它实际上是断开了switch语句并且到了循环的结尾。 然后循环回到循环的顶部,并让您再次输入选择。 如果你在内部移动中断块,它将按照它的功能运行。 这是改变的循环:
do
{
cout << "Hvilken dyreart ønsker du å registrere? (Q for å avslutte)"
<< "n1) - Fugl n2) - Fisk n3) - Insekt n4) - Skalldyrn";
cin >> valg;
switch (valg)
{
case '1':
{
Fugl fugl; fugl.les();
break;
}
case '2':
{
Fisk fisk; fisk.les();
break;
}
case '3':
{
Insekt insekt; insekt.les();
break;
}
case '4':
{
Skalldyr skalldyr; skalldyr.les();
break;
}
case 'Q': return 0;
case 'q': return 0;
default: cout << "Velg en av ovennevnte!n";
}
} while (valg != 'Q' || valg != 'q');
链接地址: http://www.djcxy.com/p/84473.html
上一篇: Switch statement behavior in C++
下一篇: Should the default case of switch statment have a break?