我有一个代码,它从输入中获取一个数字,然后将其放入数组中,然后打印所述数组。但是有一个很奇怪的副作用,当我输入 13 位数字时,我的最后一位数字是错误的。如果我输入 15 或 16 位数字,一切都很好。我无法理解发生了什么!这是代码:numberDigits 是 12、14 或 15,取决于 number 的位数。
int myNumber[numberDigits];
for (int i = 0; i <= numberDigits; i++)
{
myNumber[numberDigits - i] = number % 10;
number = number / 10;
}
printf("\n");
for (int i = 0; i <= numberDigits; i++)
{
printf("%i",myNumber[i]);
}
编辑:我的号码被初始化为 long long int。这是验证位数的检查:
if (number / 1000000000000 >= 1 && number / 1000000000000 < 10)
{
numberDigits = 12;
}
if (number / 100000000000000 >= 1 && number / 100000000000000 < 10)
{
numberDigits = 14;
}
if (number / 1000000000000000 >= 1 && number / 1000000000000000 < 10)
{
numberDigits = 15;
}
编辑:上次更新,是的,我已经更新了我的代码,它可以按照您的建议正常工作,但我需要了解为什么我的代码不起作用。我认为也许 array[12] 实际上包含 12 个元素而不是 13,当我用它访问元素 array[12] 时,我从内存中得到了一些随机值,但是为什么 array[14] 或 array 不会发生这种情况[15] 分别有 15 位和 16 位数字。以及为什么当您在错误位置访问数组时程序不会崩溃。下面的原始问题带有不起作用的旧代码。
编辑:这是感兴趣的人的完整清单。
#include <stdio.h>
#include <cs50.h>
int verify (long long int number);
int main(void)
{
printf("Please enter card number: \n");
long long int number = GetLongLong();
// AMEX uses 15 digits
if (number > 100000000000000 && ((number / 10000000000000 == 34) || (number / 10000000000000 == 37)))
{
printf("AMEX");
}
if (number > 1000000000000 && number < 10000000000000 && (number / 1000000000000 == 4))
{
printf("VISA");
}
if (number > 1000000000000000 && number < 9999999999999999 && (number / 1000000000000000 == 4))
{
printf("VISA");
}
if (number > 1000000000000000 && number < 9999999999999999 && (number / 100000000000000 == 51 || number / 100000000000000 == 52 || number / 100000000000000 == 53 || number / 100000000000000 == 54 || number / 100000000000000 == 55))
{
printf("MASTERCARD");
}
return verify(number);
}
int verify (long long int number)
{
int numberDigits;
if (number / 1000000000000 >= 1 && number / 1000000000000 < 10)
{
numberDigits = 12;
}
if (number / 100000000000000 >= 1 && number / 100000000000000 < 10)
{
numberDigits = 14;
}
if (number / 1000000000000000 >= 1 && number / 1000000000000000 < 10)
{
numberDigits = 15;
}
int myNumber[numberDigits];
for (int i = 0; i <= numberDigits; i++)
{
myNumber[numberDigits - i] = number % 10;
number = number / 10;
}
printf("\n");
for (int i = 0; i <= numberDigits; i++)
{
printf("%i",myNumber[i]);
}
return 0;
}