在我正在制作的文字冒险游戏中,所有不同的地方都运行我的不同功能。在我的餐馆,市场和供应商店,我有一个转换语句,数字1-10。所有1-9工作,但10没有。所有这些方法都返回到一个名为TownCenter()
的方法,但在这3个方法中,当我确实返回时,你必须将其垃圾邮件才能使其正常工作。这是一个代码示例:
void Diner(){
int answer;
cout << "Blah, blah. Type '0' to go back to town.\n";
cin >> answer;
switch (answer){
case 0:
return;
break;
}
Diner()
}
每次输入0时,它都会再次转到Diner()
。如果你反复垃圾0,它最终会起作用,但为什么它不会一直有效?
答案 0 :(得分:0)
我不认为代码有任何错误,除了以下注意事项:
Diner()
后缺少分号。break;
之前正在使用return;
,因此不需要procedure TForm1.cal1DayClick(Sender: TObject);
var sTemp : String;
begin
cal1.StylesData['days.Selected.StyleLookup'] := 'ListBoxItemstyleCust';
end;
语句。答案 1 :(得分:0)
我不认为你的意思是在这里使用递归。我建议使用while循环,而人们在各个位置。通过在case语句结束时再次调用相同的位置返回到同一区域,您将更深入地调用callstack,需要更多&#34;退出&#34;到&#34;离开&#34;房间。
像下面这样的do-while循环可以很好地工作:
int answer;
do {
cout << "Blah, blah. Type '0' to go back to town.\n";
cin >> answer;
switch (answer){
// other case statements
case 0:
break;
}
} while (answer != 0);
请注意,我最后不会再次致电Diner()
。让它处理同一个房间,直到&#34;离开&#34;由循环完成,而不是不必要的递归。