C语言if else未识别第三条件求助:折扣咖啡机逻辑异常
修复折扣咖啡机代码的分支判断问题
你的代码核心问题是折扣码变量dis和dis2的比较逻辑出错,导致输入正确折扣码时,程序误判为dis != dis2,从而走了第一个else if分支。以下是具体排查和修复方案:
1. 针对不同变量类型的修复
如果dis和dis2是字符串(char数组)
C语言里不能直接用==比较字符串内容,==只会对比两个字符串的内存地址,不是实际字符内容。必须用strcmp()函数(需要包含头文件<string.h>):
// 替换原分支判断逻辑 else if(p>=a && strcmp(dis, dis2) != 0){ // 折扣码不匹配 printf("\nEnjoy your Latte. "); printf("\nRemaining balance: %d",p-a); } else { // 此时必然满足p>=a且折扣码匹配,无需重复判断 printf("\nThe discount has been applied.\nEnjoy your Latte."); printf("\nRemaining balance: %.2f",(float)p-(float)a*0.9); }
如果dis和dis2是数值类型(int/long等)
先确认两个变量的实际值是否真的相等:
- 检查给
dis赋值的代码(比如scanf的变量名是否写错,输入时有没有正确读取) - 确认
dis2的初始化值是否和预期的正确折扣码一致
可以在分支前加调试打印,直接查看变量实际值:
printf("当前dis值:%d,dis2值:%d\n", dis, dis2);
2. 简化分支结构(可选优化)
既然第一个else if已经判断了p>=a,后面的分支无需重复判断该条件,直接用else即可,避免冗余:
#include <stdio.h> // 字符串比较需添加:#include <string.h> int main() { int p = 100; // 用户余额 int a = 50; // 咖啡价格 int dis = 123; // 用户输入的折扣码 int dis2 = 123; // 正确折扣码 if(p < a){ printf("\nYour balance is not enough."); printf("\nRemaining balance: %d", p); } else if(dis != dis2){ // 数值类型判断,字符串用strcmp(dis, dis2) != 0 printf("\nEnjoy your Latte. "); printf("\nRemaining balance: %d", p - a); } else { printf("\nThe discount has been applied.\nEnjoy your Latte."); printf("\nRemaining balance: %.2f", (float)p - (float)a * 0.9); } return 0; }
内容的提问来源于stack exchange,提问作者Preoxs
相关产品推荐
相关产品推荐

