【问题标题】:Check if int_long variable first character is equal to a certain number in c检查int_long变量第一个字符是否等于c中的某个数字
【发布时间】:2021-08-24 16:00:51
【问题描述】:

我目前正在学习 cs50 计算机科学哈佛在线课程,我目前的挑战是检查变量中的第一个字符是否等于数字这里是我的代码

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

int main(void) {
    long card;
    char n = card[0];
    do {
    card = get_long("Enter Credit Card Number: ");
    } while (card < 15);

    if (n == 3) {
        printf("AMEX\n");
    }



    /*
    AMEX\n 34 or 37;
    MASTERCARD\n 51, 52, 53, 54, or 55
    VISA\n  4
    INVALID\n
    */
}

伪代码如下

    if (input first number is equal to 3) {
        print "AMEX" //new line
    } else if (input first number is equal to 5) {
        print "MASTERCARD"8 //new line
    }

这里是Challenge link

我试过了

if (card[0] == 3) {
    printf("AMEX\n");
}

但由于它不是数组,所以它不起作用。

我也尝试在网上搜索答案,但由于我对 c 一点都不熟悉(我学习 HTML、css、javascript 和 react)我不太了解 c 的布局

对不起,如果我的帖子有点难以阅读,我对整个 StackOverflow 的事情都是新手,如果您需要其他任何东西,请尽管询问

【问题讨论】:

  • card 应该是字符串,而不是数字。
  • 无论如何long 如果是 32 位将没有足够的容量。
  • 另外,由于 n 是 char,所以它将是 n == '3',而不是 n == 3
  • 好的,谢谢,我试试
  • 请注意,它至少需要一个 64 位整数才能容纳 16 位信用卡号。而要从所述 16 位数字中提取最重要的数字,则需要进行数学运算:n / 1000000000000000LL 将截断最低 15 位数字并留下第 16 位。

标签: c if-statement indexing cs50


【解决方案1】:

也许你想要这样的东西(假设get_long 返回一个 64 位整数):

int main(void) {
    int64_t card;
    int n;

    do {
        card = get_long("Enter Credit Card Number: ");
    } while (card < 10000000000000LL);
    n = card / 100000000000000LL;
    if (n == 3) puts("AmEx");
    else if (n == 4) puts("Visa");
    else if (n == 5) puts("Mastercard");
    else if (n == 6) puts("Discover");
    else puts("Invalid!");
}

(注意发现卡号以 6 开头)

【讨论】:

  • 注意100000000000000LL 中的'LL' 可以,但没必要。
  • 来自链接的问题集:“美国运通使用 15 位数字,万事达卡使用 16 位数字,Visa 使用 13 位和 16 位数字。” A严格的方法在这里可能并不理想,并且将 CC 数字视为整数通常不是一个好计划,因为它们作为一个整体没有内在的数学价值,即使数字本身也是如此。这是通过建议使用get_long 而不是处理字符串数据来解决问题集的一个缺陷案例。
  • 这项工作我会阅读您提供的代码并从中学习,非常感谢!
  • @chux -- 这仅适用于 64 位系统
  • @SGeorgiades,在所有系统上为真。这里不需要LL
猜你喜欢
  • 1970-01-01
  • 2016-01-21
  • 2023-03-28
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 2012-09-28
  • 1970-01-01
相关资源
最近更新 更多