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

C语言Payment函数支付方式选择逻辑错误问题求助

支付方式选择逻辑错误的修复方案

问题根源

  1. strcmp判断逻辑完全颠倒:strcmp函数比较字符串时,返回0才代表两个字符串相等,非0表示不等。原代码里用if(strcmp(PaymentMethod, "CARD")),意思是「当输入不等于CARD时执行该分支」,直接搞反了匹配逻辑。
  2. ONLINE分支存在冗余输出:该分支里错误重复打印了CARD支付的提示语句。
  3. 潜在变量定义问题:PaymentMethod必须定义为足够大的字符数组(比如char PaymentMethod[10];),不能是单个char;且scanf读取字符串时,数组名不需要加&(数组名本身就是指针)。

修正后的代码

#include <stdio.h>
#include <string.h>

// 补充变量定义,根据实际代码结构调整作用域
char PaymentMethod[10];
int Option;

void Receipt() {
    // 自行补充Receipt函数的实现逻辑
}

void Payment(){     
    do{
        printf("\nPLEASE ENTER YOUR PREFERED PAYMENT METHOD (ONLINE/CARD):");
        // 数组名直接传入,无需加&
        scanf("%s", PaymentMethod);
        
        // 修正strcmp判断逻辑,匹配成功时返回0
        if(strcmp(PaymentMethod, "CARD") == 0){
            Option = 1;
            printf("\nYOU HAVE SELECTED CARD PAYMENT METHOD");
        }
        else if(strcmp(PaymentMethod, "ONLINE") == 0){
            Option = 1;    
            printf("\nYOU HAVE SELECTED ONLINE PAYMENT METHOD");
            printf("\n|DRUM E-BOOK ACCOUNT DETAILS : 6734-343-8621 (GOODBANK BERHAD)");
            // 删除多余的CARD支付提示语句
        }
        else{
            printf("\nYOU HAVE ENTERED WRONG PAYMENT METHOD! PLEASE TRY AGAIN");
            Option=0;
        }
    }while(Option == 0);
    
    printf("\nPress any number to continue:");
    scanf("%d", &Option);
    Receipt();
}

关键修正点说明

  • 将所有strcmp的判断条件改为== 0,确保只有输入与目标字符串完全匹配时才进入对应分支。
  • 移除ONLINE分支里的错误输出语句,避免提示混淆。
  • 补全必要的头文件和变量定义,保证代码可正常编译运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:35:28