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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:25:19