【问题标题】:When i use my code in local vscode its giving only 63 as answer but when i use a different online complier it works fine当我在本地 vscode 中使用我的代码时,它只给出 63 作为答案,但是当我使用不同的在线编译器时它工作正常
【发布时间】:2022-01-15 09:16:16
【问题描述】:

这是一个 Luhn 算法代码,它在在线编译器中运行良好,但是当我在本地 vscode 中使用它时,它只给出 63 作为输出。

我不知道它是否是内存问题,因为它是后期长变量。

即信用卡号作为输入。

#include <stdio.h>

// Finds its Luhn algorithm to see if its a valid credit card number.
void checksum(long num)
{
    int sum = 0;
    for (int i = 0; num != 0; num /= 10, i++)
    {
        if (i % 2 == 0)
        {
            sum = sum + num % 10;
        }
        else
        {
            int digit = 2 * (num % 10);
            sum = sum + (digit / 10) + (digit % 10);
        }
    }
    printf("%d", sum);
}
int main()
{
    long int num;
    // Takes credit Card number as input.
    do
    {
        printf("Number: ");
        scanf("%li", &num);
    } while (num < 0);
    checksum(num);

    return 0;
}

我的输入类似于374245455400126,378282246310005。 并且输出总是63

【问题讨论】:

  • 欢迎来到 SO。你的输入和预期输出是什么?不同编译器的不同结果通常指向应用程序中未定义的行为。变量未初始化、溢出等
  • 您的评论表明您正在处理信用卡号码。这些不是真正的数字,而是数字序列。最好将它们作为字符串处理。根据您的编译器,很容易发生intlong int 都不能存储足够大的值以容纳信用卡号。
  • @Karma0o7 使用 long long int 代替 pf long int。
  • 输入存储在 long 类型的“num”变量中,而“sum”最大为 2 位数字,因此它应该可以存储在 int 数据类型中。
  • 请不要更改您的代码以显示解决方案。这使得所有 cmets 和答案都毫无用处。如果问题不再存在,这也会使整个帖子对任何未来的访问者都无用。

标签: c integer long-integer function-definition luhn


【解决方案1】:

结果取决于long int 类型的大小,它可以等于int 类型的大小或long long int 类型的大小。

所以使用long long int 类型而不是long int 类型。

此外,由于程序需要一个无符号值,因此使用 long long int 类型而不是有符号类型会更好。

【讨论】:

  • 不,我想我可能已经重新安装了我的 vscode
  • @Karma0o7 你确定你在程序的任何地方都改变了类型吗?
  • @Karma0o7 您必须牢记相应地更新scanf 的格式说明符。
  • 谢谢,我忘记将我的 scanf 修饰符更新为“%lli”了。
  • 无论如何,Luhn 算法应该用于字符串而不是整数类型。代码会简单得多,而且您永远不会遇到任何类型的整数溢出。
猜你喜欢
  • 1970-01-01
  • 2019-10-08
  • 2021-06-19
  • 1970-01-01
  • 2022-01-22
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
相关资源
最近更新 更多