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

C语言如何判断long类型变量的首位数字?CS50信用卡校验问题

核心问题说明

你遇到的报错本质是C语言中long是整数数值类型,不属于数组/字符串类型,无法直接用[]语法按下标访问某一位数字,和你之前接触的JS字符串操作逻辑有区别。同时你原有代码还有两个隐藏问题:

  • 在调用get_long给card赋值前就尝试读取card的值,拿到的是无效垃圾值
  • 输入校验的判断条件card < 15逻辑错误,你想校验的是卡号位数而非数值大小,数值小于15的数最多只有2位,完全不符合信用卡号规则

实现方案(两种可选)

方案1:数值运算提取首位/前两位(符合CS50本题考点推荐)

要提取整数的首位数字,只需要循环对10做除法,直到结果小于10即可,此时剩下的数就是首位;如果需要提取前两位,就循环到结果小于100停止。
示例代码片段:

#include <cs50.h>
#include <stdio.h>

int main(void) {
    long card;
    // 先获取有效输入(这里简化校验,你后续可以补全位数校验逻辑)
    do {
        card = get_long("Enter Credit Card Number: ");
    } while (card < 1000000000000); // 信用卡最少13位,数值要大于等于1e12

    // 提取前两位数字(因为AMEX、万事达都需要判断前两位)
    long first_two = card;
    while (first_two >= 100) {
        first_two /= 10;
    }
    // 提取首位数字
    long first = first_two / 10;

    // 按规则判断
    if (first_two == 34 || first_two == 37) {
        printf("AMEX\n");
    } else if (first_two >=51 && first_two <=55) {
        printf("MASTERCARD\n");
    } else if (first == 4) {
        printf("VISA\n");
    } else {
        printf("INVALID\n");
    }
}

方案2:按字符串读取输入(适配你之前的JS开发习惯)

如果更习惯用下标访问字符,可以直接用get_string获取卡号输入,此时输入会以字符串形式存储,直接按下标读取对应位置的字符后,减去字符'0'即可转为对应的数字:
示例代码片段:

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

int main(void) {
    string card = get_string("Enter Credit Card Number: ");
    int len = strlen(card);
    // 简单校验位数
    if (len <13 || len >16) {
        printf("INVALID\n");
        return 0;
    }
    // 字符转数字:ASCII码中数字字符连续排列,减'0'即可得到对应数值
    int first = card[0] - '0';
    int second = card[1] - '0';
    int first_two = first *10 + second;

    // 判断逻辑和方案1一致
    if (first_two == 34 || first_two == 37) {
        printf("AMEX\n");
    } else if (first_two >=51 && first_two <=55) {
        printf("MASTERCARD\n");
    } else if (first == 4) {
        printf("VISA\n");
    } else {
        printf("INVALID\n");
    }
}

注意本题还要求实现卢恩算法校验,上面的代码只实现了前缀判断,后续你可以按题目要求补全对应的校验逻辑即可。

内容的提问来源于stack exchange,提问作者Maurice Filiatreault Hebert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:15:02