#include <stdio.h>
int lcm(int ,int );
int main()
{
int a,b,f;
printf("Enter the numbers:");
scanf("%d %d",&a,&b);
f=lcm(a,b);
printf("LCM of %d and %d : %d",a,b,f);
return 0;
}
int lcm(int a,int b)
{
static int x=1;
if(x%a==0 && x%b==0)
return x;
x++;
lcm(a,b);
}
现在,这段代码没有给出任何错误......并给出了正确的答案,但是如果没有lcm函数中的返回键盘,该值是如何返回主函数的 &#34; LCM(A,B); &#34; !请解释!!
答案 0 :(得分:1)
现在,这段代码没有给出任何错误......并且给出了正确答案,但是如果没有lcm函数lcm(a,b)中的返回键盘,该值是如何返回到main函数的;
C语言允许不正确的代码,让你自己射击。这称为undefined behaviour。您的代码显示除(1,1)之外的任何参数的未定义行为。传递(1,1)时,第一次触发第一次返回。
您应该阅读What Every C Programmer Should Know About Undefined Behavior以获取一些详细的解释和示例。
话虽如此,忽略返回值本身并不是未定义的行为。它的仅未定义调用者使用函数的返回值。
例如,您已经忽略了代码中scanf()
和printf()
函数的返回值,但它们是有效的。虽然,如果扫描成功,您应该检查scanf()
的返回值!在相关说明中,scanf()
use is discouraged in C因为它容易出错。
但在您的代码中,您确实使用了返回值(f=lcm(a,b);
)。因此,存在未定义的行为(具有上述例外情况)。
但是,如果您要将lcm()
main的呼叫写为:
scanf("%d %d",&a,&b);
lcm(a,b);
...
然后不会有任何未定义的行为(尽管它在你的程序中不会有用)。