2015-09-22 109 views
3

我試着寫我的第一個函數在ANSI 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

只是順便說一句。「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

哈哈 - 這意味着「這不能」給出預期的結果。 –

+0

@Michael,hahaha –

4

您需要()做一個函數調用:

compute_interest() 

此外,該函數有兩個參數,所以你需要向他們發送在...例如:

compute_interest(2000, 2) 
+0

請注意他有很長的參數。 .1將無法正常工作。不管怎樣,他們不應該真正成爲params。 –

+0

@MichaelDorgan好點 –

3

兩個問題:

s = compute_interest; 

這不調用該函數。由於您省略了(),因此實際上會嘗試將指向該函數的指針指定爲s。這就是爲什麼你會收到警告。這樣做是爲了調用函數:

s = compute_interest(); 

這給我們帶來了第二個問題。您定義compute_interest需要兩個參數,但這些參數的值將被scanf調用覆蓋。

你真的想在這種情況下,什麼是ki是局部變量而不是參數:

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)slong int類型,賦值爲s = compute_interest;的數據類型爲long,這就是爲什麼您會收到警告的原因。
您需要在compute_interest之後放置()以讓編譯器知道其函數調用。 您還需要刪除功能參數long k,long i並將其放置在功能體內。