C++快递费计算程序银行卡支付环节跳过卡号输入问题求助
问题原因
触发该问题的核心是变量类型定义错误:
你在main函数开头的变量声明中,将用来存储卡类型(V/M字符)的cardtype定义为了float浮点类型:
float packagevolume, L, W, H, price, beforetax, salestax, total, subtotal, method, cash, card, check, usd, paid, DL, owed, cardtype, ship, shipcost, st;
当用户输入字符V/M时,cin >> cardtype会因为输入类型不匹配直接执行失败,输入流进入错误状态,后续所有cin操作都会直接跳过,因此不会等待用户输入银行卡后四位就直接往下执行。同时因为cin >> card执行失败,card的值是未初始化的随机垃圾值,大概率小于1000,就直接触发了无效卡号的提示。
修复方案
- 修正变量类型
- 把
cardtype的类型从float改为char,适配单个字符的存储需求 - 存储银行卡后四位的
card建议从float改为int,避免浮点精度带来的判断误差
- 修正卡号判断逻辑
你当前使用的两个while逻辑完全无效(循环体第一行就是break,只会执行一次),直接替换为if-else判断即可,同时修正边界判断逻辑:四位卡号包含1000和9999,原判断的card < 9999会把9999判定为无效。
修复后的支付方式3参考代码:
if (method == 3) { char cardtype; int card; cout << endl << "Visa(V) or Mastercard(M): "; cin >> cardtype; cout << "Enter Last Four Digits of Card: "; cin >> card; if (card >= 1000 && card <= 9999) { cout << endl << "Accepted Credit Card Payment: $" << fixed << setprecision(2) << total << endl; } else { cout << endl << "Invalid Card Number. Try again." << endl; } }
内容的提问来源于stack exchange,提问作者David Johnston
相关产品推荐
相关产品推荐

