程序无报错,但是无结果

问题遇到的现象和发生背景

在求最大公约数和最小公倍数过程

问题相关代码,请勿粘贴截图

#include<stdio.h>

long long int gcd(long long int a,long long int b)
{
long long int r = a % b;
while (r != 0)
{
r = a % b;
a = b; b = r;
}
return b;
}

long long int lcm(long long int a, long long int b)
{
long long int d;
d = gcd(a,b);
long long int c;
c = (a * b) / d;
return c;
}

int main(void)
{

long long int a, b, d, m;
scanf_s("%lld %lld", &a, &b);
if (a < 0 || b < 0)
{
    printf("Input Error");
}
else
{
    d = gcd(a,b);
    m = lcm(a,b);
    printf("%lld %lld",d,m);
}


return 0;

}

运行结果及报错内容

不报错,但是输不出结果

我的解答思路和尝试过的方法
我想要达到的结果

在gcd函数里,你令b=r,因为只有r==0时才结束循环,所以该函数返回值永远为0。而在lcm中有:d = gcd(a,b);c = (a * b) / d; d为gcd函数返回值等于0,而在c = (a * b) / d中,你把0作为了被除数,这是不可以的

程序结束会显示程序结束的
如果不显示程序结束,说明陷入死循环或者无限递归了
你确定是c语言,不是c++吗
如果是c语言,你语法也不对呀
c语言所有变量定义必须在最前面,你调用函数之后还定义变量,这也编译不过去呀