2016-11-17 140 views
0

我繼續我的任務來存儲輸入信用卡號並驗證它。在整數數組中添加/添加其他所有組件失敗

1)用戶輸入違規信用卡號碼,如1234567898769999(存儲爲字符串)。 2)將字符串轉換爲整數數組int int []。 3)將位置1,3,5 ...最後一個奇數位置乘以2, ,例如2 * 2,2 * 4,2 * 6,2 * 8,2 * 8,2 * 6,2 * 9,2 * 9。 4)將它們存儲在相同的陣列和位置[4,8,12,16,16,12,18,18]。 5)位置0,2,4 ...上一個偶數位置的總和位數。

試圖用異常值出現運行下面的代碼:

#include <cs50.h> 
#include <stdio.h> 
#include <string.h> 

int main (void) { 
    string cc_string; 

    printf("Please enter a credit card number:\n"); 

    //Capture credit card number 
    cc_string = GetString(); 

    // Array of integers for credit card digits int cc_digits[15]; 
    int sum_evens, sum_odds = 0; 

    for (int i = 0; i < 16; i++) 
    { 
     cc_digits[i] = cc_string[i] - '0'; 

     //Sum digits in even positions (0 ... 14) 
     if (i % 2 == 0) 
     { 
      sum_evens = sum_evens + cc_digits[i]; 

      //Checking values 
      printf("cc_digits[%d] = %d; Sum_evens = %d\n", i, cc_digits[i], sum_evens); 
     } 

     else if (i % 2 == 1) 
     { 
      //Multiplies values in each position by 2 and stores in the same position 
      cc_digits[i] = 2 * cc_digits[i]; 
      sum_odds = sum_odds + cc_digits[i]; 

      //Checking values 
      printf("cc_digits[%d] = %d; Sum_odds = %d\n", i, cc_digits[i], sum_odds); 
     } 
    } 
} 

會有人有什麼是怎麼回事線索? 我試圖解決這個問題已經三天了。 在此先感謝您的幫助。

+0

爲了複製你的代碼,你能否刪除左邊的'>'字符? – schil227

+1

在嘗試檢查可能不存在的數字之前,應檢查輸入字符串*是否有* 16位數字。而在現實世界的實施中,在輸入另一個卡號之前應該明確清除卡號。我的同事製作了一個帶有PIN碼的安全原型,當我按下「Enter」鍵打開它時,它已經變得粗糙了。 –

回答

5

出現

int sum_evens, sum_odds = 0; 

這裏的異常值,你已經沒有初始化的sum_evens價值,但你再這樣,在for循環的if塊用它在你的程序:

sum_evens = sum_evens + cc_digits[i]; 

因此,這會導致未定義的行爲,從而出現異常值。爲了避免這種情況,請嘗試初始化sum_evens

int sum_evens = 0, sum_odds = 0;