我继续寻求存储输入信用卡号码并验证它。
1)用户类型清白信用卡号,如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);
}
}
}
有人会对这里发生的事情有所了解吗? 我试图解决这个问题已经有三天了。 在此先感谢您的帮助。
答案 0 :(得分:5)
出现异常值
int sum_evens, sum_odds = 0;
此处您尚未初始化sum_evens
的值,但您在if
for
循环的sum_evens = sum_evens + cc_digits[i];
块中以此方式在程序中进一步使用它:
sum_evens
因此,这会导致未定义的行为,从而出现异常值。为避免这种情况,请尝试初始化int sum_evens = 0, sum_odds = 0;
。
inline-block