2015-09-22 2 views
3

Я пытался написать свою первую функцию в ANSI C.Начинающий C - пробуя функции

Цель функции, чтобы получить 2 входа пользователя (капитал, interest_rate) и возвращает результат «interest_rate * капитала 'к основной функции, в которой я затем пытаюсь распечатать окончательный результат.

Мой код до сих пор:

#include <stdio.h> 

/* k= Kapital (capital) 
    * i= Zinssatz (interestrate) 
    * s= aufruf der compute funktion 
    * 
    */ 

long compute_interest (long k,long i) { 
    printf("Bitte geben Sie Ihr Startkapital ein\n"); /*user input capital*/ 
    scanf("%ld\n", &k); 

    printf("Bitte geben Sie den Zinssatz ein\n"); /*user input intrstrte*/ 
    scanf("%ld\n", &i); 

    return k * i; 
} 



long main(void) { 
    long s; 
    s = compute_interest; 
    printf("geld = %ld\n", s); 



    return 0; 
} 

Компиляция дает мне сообщение об ошибке:

warning: assignment makes integer from pointer without a cast  
    [enabled by default] 
    s = compute_interest; 
    ^

Что моя ошибка? Что я должен изменить?

+0

just btw.«s» не является вызовом «compute_interest», но результат «compute_interest» – DogeAmazed

+1

btw это int main (void) – Sanandrea

ответ

4

С вами не передают какое-либо значение функции, я предлагаю оставить функцию пустой. то есть ваша функция должна быть, как это

long compute_interest() { 

    long k, i; 
    printf("Bitte geben Sie Ihr Startkapital ein\n"); /*user input capital*/ 
    scanf("%ld\n", &k); 

    printf("Bitte geben Sie den Zinssatz ein\n"); /*user input intrstrte*/ 
    scanf("%ld\n", &i); 

    return k * i; 
} 

Тогда для вызова функции вы должны поставить скобки. т.е.

long main(void) { 
    long s; 
    s = compute_interest(); 
    printf("geld = %ld\n", s); 



    return 0; 
} 

Это должно дать вам желаемых результатов. Надеюсь, что это помогает

+0

Если 'k' и' i' определены глобально, эта функция не будет компилироваться. – George

+0

Lol - это означает, что «это не должно» дать желаемый результат. –

+0

@Michael, hahaha –

4

() Вам нужно сделать вызов функции:

compute_interest() 

Кроме того, функция принимает два аргумента, так что вам нужно, чтобы отправить их в ... например:

compute_interest(2000, 2) 
+0

Опасайтесь, у него есть жаждет параметров. .1 не будет работать хорошо. Остерегайтесь, они не должны быть параметрами, как написано. –

+0

@MichaelDorgan хорошая точка –

3

Два вопроса:

s = compute_interest; 

Это не вызывает функцию. Поскольку вы опустили (), это фактически пытается назначить указатель на функцию s. Вот почему вы получаете предупреждение. Для этого позвоните по этой функции:

s = compute_interest(); 

Это приводит нас ко второй проблеме. Вы определяете compute_interest для принятия двух параметров, однако значение этих параметров перезаписывается вызовами scanf.

То, что вы действительно хотите в этой ситуации для k и i быть локальными переменными, а не параметры:

long compute_interest() { 
    long k, i; 

    printf("Bitte geben Sie Ihr Startkapital ein\n"); /*user input capital*/ 
    scanf("%ld\n", &k); 

    printf("Bitte geben Sie den Zinssatz ein\n"); /*user input intrstrte*/ 
    scanf("%ld\n", &i); 

    return k * i; 
} 
1

В C, имена функций рассматриваются как указатель на саму функцию. compute_interest - это имя функции, а ее тип - long (*)(long, int). s имеет тип long int, а в задании s = compute_interest; присваивается указатель на тип данных long, и именно по этой причине вы получаете предупреждение.
Вам необходимо разместить () после compute_interest, чтобы компилятор знал, что его вызов функции. Вам также необходимо удалить функции параметров long k,long i и поместить их в корпус функции.

Смежные вопросы