2016-12-21 80 views
-1

我不知道問題出在哪裏。代碼編譯沒有任何錯誤,但運行它時,它要求我輸入一個數字,但是當我在輸入後輸入時崩潰。有誰可以告訴我問題在哪裏?我認爲存在一些內存問題,但我無法弄清楚在哪裏。提前致謝。爲什麼下面的C代碼不工作?我無法弄清楚錯誤。

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    int n[16]; 
    long long a; 
    printf("enter your credit card number \n"); 
    scanf(" %lld", &a); 
    int i; 
    for (i = 0; i < 15; i++) 
    { 
     n[i] = (a % (10^(15-i)))/10^(14-i); 
    } 
    int m = (n[1] + n[3] + n[5] + n[7] + n[9] + n[11] + n[13]); 
int w = 2 * m; 
int k = w % 10; 
int l = n[0] + n[2] + n[4] + n[6] + n[8] + n[10] + n[12] + n[14]; 
int z = k + l; 
if (z % 10 == 0) 
{ 
    printf("you card is valid"); 
} 
else 
{ 
    printf("go get a new card"); 
} 
return 0; 
} 
+0

請不要帶有語言標籤的垃圾郵件。只添加相關標籤。 –

+0

可能的溢出? –

+0

至於你的問題,首先你應該在調試器中運行一個調試版本來定位崩潰發生的代碼。然後檢查涉及的變量,看看它們是否都看起來沒問題。最後編輯你的問題以包含這些細節。 –

回答

2

^表示按位XOR。如果您想採取某些措施,請使用pow()功能。

+0

使用pow()函數後雖然沒有崩潰,但它確實顯示每個數字= 0.爲什麼會這樣? – Salmaan

0

雖然倫丁提到所需的代碼,但你的運行時錯誤的實際問題是這樣的:

  • (10^(15-i))給出0時i = 5

  • 10^10記得XOR規則?)所以(a % (10^(15-i)))變成a%0,這是經過零運行時錯誤的經典除法。

+0

值得銘記的是它不會崩潰在'/ 10 ^(14-i)'上'i = 4',因爲'/'的優先級高於'^'的優先級。 – mch

相關問題