2014-02-07 5 views
0

Я надеюсь, что кто-то может мне помочь. Я полный и полный новичок 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; 


} 

ответ

0
for (i = 2; i <= 16; i + 2) 

должен быть

for (i = 2; i <= 16; i = i + 2) 

или

for (i = 2; i <= 16; i += 2) 

Как вы его значение я никогда не модифицируется, поэтому цикл никогда не заканчивается.

+0

Wow. Мне так глупо пропустить это. Спасибо! – TeraBat

+0

Нет проблем. Но обратите внимание на наблюдение Вальтера - в вашем первом цикле вы переходите от 15 до 0 включительно, что, вероятно, правильно. Но в этом вы идете от 2 до 16 включительно, что неправильно. Вы либо хотите перейти от 0 до 14, либо от 1 до 15. 16 выходит за границы массива. – happydave

0

Вы объявляете ваш массив

array[16] so array[0] .. array[15] 

Во втором цикле для вас есть

when i = 16 array[16]! 

Вальтера

+0

Спасибо, что указали это! Одна вещь, которую я скажу для C, учит меня быть детально ориентированным, как вау. – TeraBat