Array - странные значения [C] cs50 pset1 - PullRequest
0 голосов
/ 30 ноября 2018

Мне нужна ваша помощь.

Около месяца назад я начал свое путешествие с программирования.В настоящее время я делаю 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])

не работает: /

ЗДЕСЬ Я ПЫТАЛСЯ ПОКАЗАТЬ МОЮ ПРОБЛЕМУ НА КАРТИНКЕ

Можеткто-нибудь может мне помочь с этим?

...