如何重置int main执行流程?当menyval2==4时回到起始步骤
问题:满足
if(menyval2 ==4)条件时,让程序回到MenyObjekt.Meny1();重新执行 先看你提供的代码片段:
int main() { Kund KundObjekt; Meny MenyObjekt; Konto KontoObjekt; MenyObjekt.Meny1(); KundObjekt.LoggaIn(); MenyObjekt.Meny2(KundObjekt); if (menyval2 == 4) { // 这里需要回到MenyObjekt.Meny1();重新执行 } KontoObjekt.PengarIn(); KontoObjekt.PengarUt(); KontoObjekt.VisaSaldo(); return 0; system("PAUSE"); }
你想在menyval2 ==4时,让程序回到MenyObjekt.Meny1();的位置,重新执行后续的登录、菜单等流程,对吧?下面给你两种实用的实现方式:
解决方法1:用do-while循环包裹核心流程
这是最直观的方式,把需要重复执行的逻辑(从菜单1到菜单2的部分)放到循环里,用一个控制变量来决定是否继续循环。修改后的代码大概是这样:
int main() { Kund KundObjekt; Meny MenyObjekt; Konto KontoObjekt; bool shouldRepeat = false; // 控制循环的标志 do { shouldRepeat = false; // 每次循环开始先重置标志 MenyObjekt.Meny1(); KundObjekt.LoggaIn(); MenyObjekt.Meny2(KundObjekt); if (menyval2 == 4) { shouldRepeat = true; // 满足条件时,设置标志为true,让循环重来 continue; // 跳过后面的账户操作,直接进入下一轮循环 } // 只有不满足重复条件时,才执行账户相关操作 KontoObjekt.PengarIn(); KontoObjekt.PengarUt(); KontoObjekt.VisaSaldo(); } while(shouldRepeat); // 当标志为true时,重新执行循环 system("PAUSE"); return 0; }
说明:这里用do-while是因为我们至少要执行一次核心流程,当menyval2==4时,把shouldRepeat设为true,循环就会重新从MenyObjekt.Meny1();开始执行,同时用continue跳过后面的账户操作,完全符合你的需求。
解决方法2:把核心流程封装成函数
如果你的逻辑后续可能更复杂,把重复执行的部分抽成单独的函数会让代码更整洁、易维护。比如:
// 定义一个函数,封装需要重复执行的流程 void runMainFlow(Kund& kund, Meny& meny, Konto& konto) { meny.Meny1(); kund.LoggaIn(); meny.Meny2(kund); if (menyval2 == 4) { // 满足条件时,递归调用自身,回到流程开头 runMainFlow(kund, meny, konto); return; // 调用后直接返回,避免执行后面的代码 } konto.PengarIn(); konto.PengarUt(); konto.VisaSaldo(); } int main() { Kund KundObjekt; Meny MenyObjekt; Konto KontoObjekt; runMainFlow(KundObjekt, MenyObjekt, KontoObjekt); system("PAUSE"); return 0; }
说明:这种方式把重复的逻辑封装到runMainFlow函数里,当menyval2==4时,直接递归调用这个函数,就会重新执行整个流程。不过要注意,如果用户多次触发这个条件,递归深度过高可能导致栈溢出,所以如果是频繁重复的场景,更推荐第一种循环的方式。
内容的提问来源于stack exchange,提问作者filipanton1
相关产品推荐
相关产品推荐

