2014-02-07 79 views
0

我希望有人能幫助我。我是一個完全徹底的C新手。程序凍結 - Luhn的算法

這是針對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

哇。因爲錯過了這些,我感到非常愚蠢。謝謝! – TeraBat

+0

沒問題。但是請注意valter的觀察 - 在第一個循環中,你從15變爲0,這可能是正確的。但是在這個你從2到16包含,這是錯誤的。您要麼從0到14,要麼從1到15. 16不在數組邊界之內。 – happydave

0

你宣佈你的陣列

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

在第二個for循環中你有

when i = 16 array[16]! 

瓦爾特

+0

謝謝你指出這一點!有一件事我要爲C說,它教會我要像WOW一樣詳細定位。 – TeraBat