我需要你的帮助。
大约1个月前,我开始了编程之旅。 目前,我正在使用CS50,遇到第一个问题,该问题涉及整数数组中的怪异值。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
int checksum(int long long numer);
int length_of_acc_number(int long long numer);
int checkcard(int l, int numer_arr[l]);
int main(void)
{
//DATA:
int long long numer = get_long_long("nr:");
int long long numer2 = numer;
int l = length_of_acc_number(numer);
//I'M CREATING ARRAY
int numer_arr[l];
int i = 0;
while (numer2 != 0)
{
numer_arr[i] = numer2 % 10;
printf("%i\n", numer_arr[i]);
numer2 /= 10;
i++;
}
//LOOKING IF EVERYTHING IS OK
int werdykt = checksum(numer);
printf("werdykt: %i\n", werdykt);
int rodzaj_karty = checkcard(l, &numer_arr[l]);
//WERDYKT
if(werdykt == 1)
{
if(rodzaj_karty == 1)
{
printf("AMERICAN EXPRESS\n");
}
else if(rodzaj_karty == 2)
{
printf("MASTER CARD\n");
}
else if(rodzaj_karty == 3)
{
printf("VISA\n");
}
else if(rodzaj_karty == 0)
{
printf("INVALID\n");
}
else
{
printf("INVALID\n");
}
}
else
{
printf("INVALID\n");
}
}
//FUNKCJA CHECKSUM()
int checksum(int long long numer)
{
int sum1 = 0;
int sum2 = 0;
int l = 0;
while (numer != 0)
{
int digit1 = numer % 10;
int digit2 = ((numer % 100)/10) * 2;
numer /= 100;
sum1 = sum1 + digit1;
l++;
//WARUNEK NA CYFRE 2, KTÓRA GDY WIĘKSZA OD 10 MUSI BYĆ PRZEDSTAWIONA JAKO SUMA DWÓCH CYFR
//IF DIGIT2 IS HIGHER THAN 10 IT HAS TO BE PRESENTED AS SUM OF TWO DIGITS
if(digit2 >= 10)
{
int digit3 = (digit2 % 10) + 1;
sum2 = sum2 + digit3;
l++;
}
else
{
sum2 = sum2 + digit2;
}
}
int sum = sum1 + sum2;
printf("SUMA = %i\n", sum);
// FINAL CONDITION:
int result;
if(sum % 10 == 0)
{
result = 1;
}
else
{
result = 0;
}
return result;
}
//FUNKCJA L
int length_of_acc_number(int long long numer)
{
int l = 0;
while (numer !=0)
{
numer /= 10;
l++;
}
return l;
}
//IM LOOKING WHAT TYPE OF CARD IS THAT
int checkcard(int l, int numer_arr[l])
{
int rodzaj_karty;
if (l >= 13 & l <= 16)
{
//AMERICAN EXPRESS
if(l == 15 & numer_arr[0] == 3 & (numer_arr[1] == 7 || numer_arr[1] == 4))
{
rodzaj_karty = 1;
}
//MASTER CARD
if (l == 16 & numer_arr[0] == 5 & (numer_arr[1] == 1 || numer_arr[1] == 2 || numer_arr[1] == 3) || numer_arr[1] == 4 || numer_arr[1] == 5 )
{
rodzaj_karty = 2;
}
//VISA
if ((l == 13 & numer_arr[0] == 4) || (l == 16 & numer_arr[0] == 4))
{
rodzaj_karty = 3;
}
}
else
{
rodzaj_karty = 0;
}
return rodzaj_karty;
}
我不知道为什么我的数组采用如此奇怪的值。 因此,我的功能是:
int checkcard(int l, int numer_arr[l])
不起作用:/
HERE I TRIED TO SHOW MY PROBLEM ON THE PICTURE
有人可以帮我吗?