У меня есть код, который получает число от ввода, а затем помещает его в массив и затем печатает указанный массив. Но есть очень странный побочный эффект, когда я вводил 13-значное число, моя последняя цифра неверна. Если я укажу 15 или 16-значный номер, все будет в порядке. Я не понимаю, что происходит! Вот код: numberDigits - это 12, 14 или 15, в зависимости от количества цифр.C Array ведет себя по-разному с различным количеством цифр, почему?
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]);
}
EDIT: Мой номер инициализируется как долгое долгое междунар. Вот чек, чтобы проверить количество цифр:
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;
}
EDIT: Последнее обновление, Да, я обновил свой код и он работает, как ожидалось с вашими предложениями, но мне нужно, чтобы понять, почему мой код не работает , Я думаю, что, возможно, массив [12] фактически содержит 12 элементов, а не 13, и когда я получаю с ним доступ к массиву элементов [12], я получаю некоторое случайное значение из памяти, но почему этого не происходит с массивом [14] или массивом [15] с 15 и 16 номерами цифр соответственно. И почему программа не сбой, как и при доступе к массиву в неправильном положении. Исходный вопрос ниже со старым кодом, который не работает.
EDIT: Вот целая листинг для заинтересованных.
#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;
}
Это работает, но что не так с моим кодом? Это в основном то же самое на всех уровнях. Почему изменяется число трейдинга, если, например, я ввожу 9837367482735, он дает мне 9837367482731, но если я вводим 15 или 16-значный номер, все будет правильно. – Dvole
Я не знаю, что случилось, но, возможно, вы делаете что-то еще. Поместите весь код, чтобы увидеть, что может быть неправильным. – hinafu
Введен полный код. – Dvole