我无法理解我的C ++开关语句。
我必须输入两次接受的整数间隔才能使函数返回到开关。然后它直接落到案例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) - Skalldyr\n";
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;
}
答案 0 :(得分:0)
我不知道你的情况发生了什么,但我运行了你的代码,它对我来说很好。输入1,4,Q和程序按预期退出....可能是编译器或DyrLuft类问题(我只是删除了继承以使其工作,也来自案例2,3,4)。
答案 1 :(得分:0)
你有:
case '1':
{
Fugl fugl; fugl.les();
} break;
运行此项时,您需要创建一个Fug1对象,然后调用les()
函数。当您在les()
中输入适当的年龄时,该函数将返回。由于break;
在case块之外,它实际上是在断开switch语句并进入循环结束。然后它循环回到循环的顶部,让你再次输入一个选择。如果你在内部移动break,那么它就可以正常运行。这是改变的循环:
do
{
cout << "Hvilken dyreart ønsker du å registrere? (Q for å avslutte)"
<< "\n1) - Fugl \n2) - Fisk \n3) - Insekt \n4) - Skalldyr\n";
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');