Я надеюсь, что кто-то может мне помочь. Я полный и полный новичок C.Программа Freezing - Алгоритм Luhn's
Это для школьного задания в классе на C (просто старый C, а не C# или C++), и профессор настаивает на том, что единственным компилятором, которого мы разрешили использовать, является Borland 5.5.
Общее назначение - запустить алгоритм, который может проверять действительность номера кредитной карты. Я успешно получил программу, чтобы получить номер CC ввода пользователя, а затем часть, которая вычислена в массив. Он печатает в основном то, что я хочу.
Однако, когда я ввел последнюю функцию (ту, которую я прокомментировал как таковой), а затем скомпилировал, программа только начала зависать. Я понятия не имею, что может быть причиной этого.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
//global variables declared.
//in an earlier version, I was going to use multiple functions, but I couldn't make them work
float array[16];
double num, ten;
int i, a, b, x, y, check;
int main()
{
ten = 10;
//pick up user-input number
printf("Enter your credit card number\n>");
scanf("%lf", &num);
//generate the array
for (i = 15; i >= 0; i--)
{
array[i] = fmod(num, ten);
num /= 10;
printf("Array is %1.1lf\n", array[i]);
}
//double every other number. If the number is greater than ten, test for that, then parse and re-add.
//this is where the program starts to hang (I think).
{for (i = 2; i <= 16; i + 2)
{
array[i] = array[i] * 2;
if (array[i] >= 10)
{
a = (int)array[i] % 10;
b = (int)array[i]/10;
array[i] = a + b;
}
}
printf("%f", array[i]);
}
//add the numbers together
x = array[2] + array[4] + array[6] + array[8] + array[10] + array[12] + array[14] + array[16];
y = array[1] + array[3] + array[5] + array[7] + array[9] + array[11] + array[13] + array[15];
check = x + y;
//print out a test number to make sure the program is doing everything correctly.
//Right now, this isn't happening
printf("%d", check);
return 0;
}
Wow. Мне так глупо пропустить это. Спасибо! – TeraBat
Нет проблем. Но обратите внимание на наблюдение Вальтера - в вашем первом цикле вы переходите от 15 до 0 включительно, что, вероятно, правильно. Но в этом вы идете от 2 до 16 включительно, что неправильно. Вы либо хотите перейти от 0 до 14, либо от 1 до 15. 16 выходит за границы массива. – happydave