Почему компилятор понимает переменную как указатель, а это не так? - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь написать эту программу:

Написать функцию digit(n, k), которая возвращает kth di git (справа) в n (положительное целое число). Например,

  • digit(829, 1) возвращает 9
  • digit(829, 2) возвращает 2
  • digit(829, 3) возвращает 8

Если k больше, чем число цифр в n, функция возвращает 0.

Я получаю предупреждающее сообщение:

, возвращая (int *) (int, int) из функции с возвращаемый тип int делает целое число из указателя без приведения

int digit(int a,int b);

int main (void){

    int i, c;
    printf("Enter the number");
    printf("Enter the digit you want to check");

    scanf("%d",&i);
    scanf("%d",&c);
    puts("\n");

    printf("%d", digit(i,c));
}

int digit (int a, int b){
    while(b>0)
    {
        int digit = a%10;
        a/=10;
        b--;
    }
    return digit;
}

Что недопустимо в этом?

1 Ответ

6 голосов
/ 10 января 2020

С

return digit;

вы возвращаете указатель на саму функцию digit.

Переменная di git - это local внутри только l oop.

Возможно, вы хотели, чтобы эта переменная была за пределами l oop, но затем вы должны переименовать ее, чтобы не путать ее с функцией.

Возможно, что-то наподобие

int get_digit(int number, int digit_number)
{
    int one_digit = 0;

    while(digit_number-- > 0)
    {
        one_digit = number % 10;
        number /= 10;
    }

    return one_digit;
}

Обратите внимание, что я изменил имена всех символов, надеюсь, теперь они имеют больше смысла, когда их имена описывают, для чего они предназначены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...