2017-10-12 83 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()函数没有返回值,但您试图捕获它。