Изменение значения целого числа в функции - PullRequest
0 голосов
/ 20 декабря 2018

У меня проблема с функцией multiply2, которая не изменяет значения ccn1 на ccn8.Он должен умножить их на 2, и если результат будет равен или больше 10, то возьмите произведения этого уравнения и сложите их вместе (т.е. 7 * 2 = 14, поэтому 1 + 4 = 5).Все это будет работать, но я заметил, что функция multiply2 сохраняет значение pX при себе, и я хотел бы перезаписать значения ccn1 в ccn8, а затем суммировать все значения вместе (ccn1 до ccn16).Пожалуйста, помогите :( PS: я новичок в этом, поэтому, пожалуйста, будьте осторожны, я уверен, что это выглядит как беспорядок для вас.

Программа компилируется, как это без ошибок, заметьте, это таквключает библиотеку cs50.h для функции «get_long_long», которая запрашивает у пользователя номер кредитной карты

Я пытался использовать указатели, но, очевидно, я не до конца понимаю концепцию! Мне удалось разыменовать *pX, которому присвоены значения ccn1, ccn2 и т. д., но они по-прежнему не обновляются в main.

вся описанная здесь проблема: https://docs.cs50.net/2018/x/psets/1/credit/credit.html#tl-dr

Спасибо!

# include <cs50.h>
# include <stdio.h>
# include <math.h>

void multiply2 (int * pX);

long long ccn;


//a program to check the credit card number and print out if it's  American Express, Visa, or MasterCard. if else - ILVALID.
int main(void)
{
//prompt user for a credit card number
ccn = get_long_long("Number: ");

//every second digit starting from second to last
int ccn1 = (ccn % 100) / 10;
int ccn2 = (ccn % 10000) / 1000;
int ccn3 = (ccn % 1000000) / 100000;
int ccn4 = (ccn % 100000000) / 10000000;
int ccn5 = (ccn % 10000000000) / 1000000000;
int ccn6 = (ccn % 1000000000000) / 100000000000;
int ccn7 = (ccn % 100000000000000) / 10000000000000;
int ccn8 = (ccn % 10000000000000000) / 1000000000000000;
//printf("%i\n%i\n%i\n%i\n%i\n%i\n%i\n%i\n", ccn1, ccn2, ccn3, ccn4, ccn5, ccn6, ccn7, ccn8);

//all the other digits
int ccn9 = (ccn % 10);
int ccn10 = (ccn % 1000) / 100;
int ccn11 = (ccn % 100000) / 10000;
int ccn12 = (ccn % 10000000) / 1000000;
int ccn13 = (ccn % 1000000000) / 100000000;
int ccn14 = (ccn % 100000000000) / 10000000000;
int ccn15 = (ccn % 10000000000000) / 1000000000000;
int ccn16 = (ccn % 1000000000000000) / 100000000000000;
//printf("%i\n%i\n%i\n%i\n%i\n%i\n%i\n%i\n", ccn9, ccn10, ccn11, ccn12, ccn13, ccn14, ccn15, ccn16);



if (((ccn >= 340000000000000 && ccn <= 349999999999999) || (ccn >= 370000000000000 && ccn <= 379999999999999)) ||
    ((ccn >= 5100000000000000 && ccn <= 5199999999999999) || (ccn >= 5500000000000000 && ccn <= 5599999999999999)) ||
    ((ccn >= 4000000000000 && ccn <= 4999999999999) || (ccn >= 4000000000000000 && ccn <= 4999999999999999)))
{
    multiply2(&ccn1);
    multiply2(&ccn2);
    multiply2(&ccn3);
    multiply2(&ccn4);
    multiply2(&ccn5);
    multiply2(&ccn6);
    multiply2(&ccn7);
    multiply2(&ccn8);


    int sum = (ccn1 + ccn2 + ccn3 + ccn4 + ccn5 + ccn6 + ccn7 + ccn8 + ccn9 + ccn10 + ccn11 + ccn12 + ccn13 + ccn14 + ccn16);
    printf("%i\n", sum);


}

/NOTHING FROM ABOVE - INVALID
else
{
    printf("INVALID\n");
}



}

void multiply2 (int * pX)
{
if ((*pX *2) >= 10)
{
    *pX = ((*pX * 2) % 10) + 1;
    printf("%i\n", *pX);
}
else
{
    printf("%i\n", (*pX * 2));
}
}

1 Ответ

0 голосов
/ 20 декабря 2018

Ваша функция multiply2 изменяет значение переданного параметра только в том случае, если его значение не менее 5.
Попробуйте это:

void multiply2(int* pX)
{
  *pX = *pX * 2; /* Multiply value by 2 */
  if (*pX >= 10)
    *pX = (*pX % 10) + 1; /* Adjust if value greater than or equal to 10 */
  printf("%d\n", *pX);
}
...