C语言Payment函数支付方式选择逻辑错误问题求助
支付方式选择逻辑错误的修复方案
问题根源
- strcmp判断逻辑完全颠倒:strcmp函数比较字符串时,返回
0才代表两个字符串相等,非0表示不等。原代码里用if(strcmp(PaymentMethod, "CARD")),意思是「当输入不等于CARD时执行该分支」,直接搞反了匹配逻辑。 - ONLINE分支存在冗余输出:该分支里错误重复打印了CARD支付的提示语句。
- 潜在变量定义问题: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
相关产品推荐
相关产品推荐

