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

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,就直接触发了无效卡号的提示。

修复方案

  1. 修正变量类型
  • 把cardtype的类型从float改为char,适配单个字符的存储需求
  • 存储银行卡后四位的card建议从float改为int,避免浮点精度带来的判断误差
  1. 修正卡号判断逻辑
    你当前使用的两个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 12:00:01