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

C语言程序逻辑异常:需循环结束后输出,输入R即触发输出

代码逻辑问题修复方案

异常根本原因

  • 当前代码将账户余额的打印逻辑直接嵌入在while循环的case 'R'分支内部,程序每读取到R指令就会立刻触发打印操作,不会等待所有输入流程走完、循环因读取Q指令终止后再统一输出。
  • 原有循环结构存在漏洞:如果程序读取到既不是R也不是Q的操作指令,switch没有对应分支处理,也不会更新operationCode的值,会直接进入死循环。

具体调整逻辑

  • 移除case 'R'分支内所有即时打印的代码,仅保留操作标记的占位逻辑。
  • 将余额打印的代码段,移到while循环完全退出之后的位置,确保只有当用户输入Q、循环终止时,才会触发最终结果的计算与输出。
  • 把读取下一条操作指令的逻辑,统一放到switch分支之后的循环固定位置,避免不同分支漏读输入导致的死循环。

调整后可运行代码

int main() {
    float amountOfTurkishLira = 0;
    float amountOfBtc = 0;
    float amountOfEth = 0;
    char operationCode;
    char operationTurkishLira;

    // 读取初始类型校验指令
    scanf(" %c", &operationTurkishLira);
    if (operationTurkishLira != 'T') {
        printf("Error: Operation could not be completed.");
    } else {
        // 读取初始土耳其里拉入账金额
        scanf(" %f", &amountOfTurkishLira);
        // 读取第一条流程操作指令
        scanf(" %c", &operationCode);

        while (operationCode != 'Q') {
            switch (operationCode) {
                case 'R':
                    // R指令仅作为流程标记,不触发即时输出
                    break;
                // 后续可在此处补充其他操作分支的业务逻辑
            }
            // 统一读取下一条操作指令
            scanf(" %c", &operationCode);
        }

        // 循环终止(输入Q)后统一输出账户余额
        if (amountOfBtc == 0 && amountOfEth == 0) {
            printf("Our account holds %.2f TRY\n", amountOfTurkishLira);
        } else {
            printf("Our account holds %.2f TRY | %.2f BTC | %.2f ETH.\n", amountOfTurkishLira, amountOfBtc, amountOfEth);
        }
        printf("Bye..");
    }
    return 0;
}

修复后运行效果

按照测试输入序列T、1000、R、Q执行时,程序会依次读取完全部输入内容后,再统一触发结果输出,与预期逻辑完全一致。

内容的提问来源于stack exchange,提问作者Ehsan Kaamil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 06:24:03