在整数数组中对每个其他组件求和/添加失败

Mar*_*ini 0 c arrays validation integer cs50

我继续寻求存储输入信用卡号并进行验证.

1)用户类型的hipothetic信用卡号码,如1234567898769999(存储为字符串).2)将字符串转换为整数数组int digits [].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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有人会对这里发生的事情有所了解吗?我试图解决这个问题已经有三天了.在此先感谢您的帮助.

Che*_*bim 5

出现异常值

int sum_evens, sum_odds = 0;
Run Code Online (Sandbox Code Playgroud)

这里你还没有初始化它的值sum_evens,但是你在循环if块中以这种方式在程序中进一步使用它for:

sum_evens = sum_evens + cc_digits[i];
Run Code Online (Sandbox Code Playgroud)

因此,这会导致未定义的行为,从而出现异常值.为避免这种情况,请尝试初始化sum_evens.

int sum_evens = 0, sum_odds = 0;
Run Code Online (Sandbox Code Playgroud)