2016-11-17 130 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;