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
相关产品推荐
相关产品推荐

