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

C语言货币转换器do-while循环多条件判断失效求助

C语言货币转换器do-while循环无法退出的问题解决

问题1:循环条件逻辑错误

你的do-while循环条件(option) != 'q' || 'Q'完全不符合预期。C语言中字符常量'Q'是非零值,在逻辑判断里会被视为真。不管option是不是'q',||右侧的'Q'永远为真,导致整个条件始终成立,循环根本无法退出。

正确逻辑应该是:当输入的字符**既不是'q'也不是'Q'**时,继续循环。所以条件要改成:

while(option != 'q' && option != 'Q');

问题2:scanf缓冲区残留异常

当用户输入金额后按下回车,scanf("%f", &amount)只会读取数字部分,换行符\n会留在输入缓冲区里。下一次调用scanf("%c", &option)时,会直接读取这个换行符,导致程序跳过输入选项的步骤,出现逻辑混乱。

解决方法是在读取字符的scanf前加一个空格,忽略缓冲区里的空白字符:

scanf(" %c", &option);

修正后的完整代码

#include <stdio.h>

int main() {
    char option;
    float amount;

    do
    {
        printf("输入选项(U/u转美元, E/e转欧元, Q/q退出): ");
        // 加空格忽略缓冲区空白字符
        scanf(" %c", &option);

        switch (option)
        {
            case 'U':
            case 'u':
                printf("输入SAR金额: ");
                scanf("%f", &amount);
                printf("\n%.3f SAR => %.3f USD\n", amount, amount * 0.266667);
                break;
            case 'E':
            case 'e':
                printf("输入SAR金额: ");
                scanf("%f", &amount);
                printf("\n%.3f SAR => %.3f EURO\n", amount, amount * 0.273187);
                break;
            case 'q':
            case 'Q':
                printf("程序退出...\n");
                break;
            default:
                printf("无效选项! 请重新输入.\n");
        }

    } while(option != 'q' && option != 'Q'); // 修正循环条件

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:01:25