Как я могу передать значение длинного типа в параметр функции с целым числом в качестве возвращаемого типа?

#c #function #types

#c #функция #типы

Вопрос:

У меня возникли проблемы с настройкой кода для функции. Отображается сообщение об ошибке: конфликтующие типы.

Поэтому я думаю, это потому, что мой возвращаемый тип отличается от значения в параметре. Итак, мне было интересно, возможно ли иметь разные типы значений в параметре и как исправить этот код.

 //prompt user to enter the credit card number and print it on screen
long get_credit()
{
   long credit_number = get_long("Number: ");
   //printf("Number: %lin",credit_number); //debugging
  return credit_number;
}

//digits lengther
int get_digit(long credit_number)
{
       long credit = credit_number; //length of the number of digits given by the user
       int length = 0;
       while(credit != 0)
       {
       credit = credit/10 ;
       length    ;
       }
       return length;
}
 

Это сообщение об ошибке, которое оно мне показывает.

 credit_v2.c:154:5: error: conflicting types for 'get_digit'
int get_digit(long credit_number)
    ^
credit_v2.c:7:5: note: previous declaration is here
int get_digit(void); //calculate the number of digits
    ^
 

Еще раз, спасибо вам, ребята, за всю помощь!

Комментарии:

1. измените строку int get_digit(void); на int get_digit(long credit_number); . Это строка 7 из credit_v2.c

Ответ №1:

Вы получаете эту ошибку, потому что прототип функции не соответствует определению.

Как указано в сообщении об ошибке, вы объявили функцию как int get_digit(void); , то есть функцию , которая не принимает аргументов и возвращает an int . Однако определение функции показывает, что она принимает один аргумент типа long .

Вам нужно сделать так, чтобы прототип соответствовал определению.

 int get_digit(long credit_number); //calculate the number of digits 
 

Ответ №2:

Измените строку 7 с:

 int get_digit(void);
 

Для:

 int get_digit(long credit_number);