2017-10-12 100 views
-3

我是新來編程c。當運行下面的代碼,我收到以下錯誤與在=一個小箭頭指向登錄:錯誤:無效值不被忽略 - 在簡單的c程序

錯誤:不被忽略,因爲它空值應該是

* GCD = gcd_lcm((乘數1%乘數2 ),factor2,gcd,lcm);

我試圖按照向另一篇文章中找到的void類型返回值的步驟進行操作,但似乎無法在我的代碼中工作。有人可以幫我指出我的錯誤嗎?非常感謝。

#include <stdio.h> 

void gcd_lcm(int factor1, int factor2, int *gcd, int *lcm); 

int main(void) 
{ 

    int factor1; 
    int factor2; 
    int GCD; 
    int LCM; 

    printf("Enter Factor1: "); 
    scanf(" %d", &factor1); 

    printf("Enter Factor2: "); 
    scanf(" %d", &factor2); 

    gcd_lcm(factor1, factor2, &GCD, &LCM); 
    printf("The GCD of %d and %d is %d. The LCM is %d\n", factor1, factor2, 
    GCD, LCM); 

return 0; 
} 

void gcd_lcm(int factor1, int factor2, int *gcd, int *lcm) 
{ 

if (factor2 == 0) 
{ 
    *gcd = factor1; 
    *lcm = (factor1 * factor2)/*gcd; 
} 
else 
{ 
    *gcd = gcd_lcm((factor1 % factor2), factor2, gcd, lcm); 
    *lcm = (factor1 * factor2)/*gcd; 
} 
} 

我已經改變了這個代碼,現在可以工作,但是如何?

void gcd_lcm(int factor1, int factor2, int *gcd, int *lcm) 
{ 

if (factor2 == 0) 
{ 
    *gcd = factor1; 
    *lcm = (factor1 * factor2)/*gcd; 
} 
else 
{ 
    gcd_lcm(factor2, (factor1 % factor2), gcd, lcm); 
    *lcm = (factor1 * factor2)/*gcd; 
} 
} 
+0

只要刪除'* gcd ='。 –

+0

*請*,縮進您的代碼並在整個代碼中一致地使用[indenting style](https://en.wikipedia.org/wiki/Indent_style)。這樣做使得**更容易閱讀/維護。這樣做對於你放在Stack Overflow上的代碼會使你更有可能讓人們對你的帖子進行投票,並使人們更有可能花時間回答你的問題。選擇哪種風格並不重要(儘管對於某些語言來說某些風格比其他風格更合適)。但是,選擇一個並且一致地用於單個項目中的所有代碼。 – Makyen

回答

1

你寫

void gcd_lcm(int factor1, int factor2, int *gcd, int *lcm); 

這意味着gcd_lcm沒有返回值。

在這裏,你要使用它的返回值(它沒有):

*gcd = gcd_lcm((factor1 % factor2), factor2, gcd, lcm); 

在猜測,因爲gcd向下傳遞到遞歸調用,你可以使用:

gcd_lcm((factor1 % factor2), factor2, gcd, lcm); 

但是,如果我沒有記錯,factor2永遠不會改變,因此遞歸永遠不會停止......

0

這裏:

*gcd = gcd_lcm((factor1 % factor2), factor2, gcd, lcm); 

gcd_lcm()函數沒有返回值,但您試圖捕獲它。