You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:51