代码无法运行该怎么办

#include <stdio.h>int main(){ int hcf(int x, int y); int lcd(int x, int y); int a, b, c, d; printf("请输入两个数:"); scanf_s("%d%d", &a, &b); c = hcf(a, b); d = lcd(a, b); printf("最大公约数:%d\n最小公倍数:%d\n", c, d); return 0;}int hcf(int x, int y){ int i, z; if (x < y) { i = x; x = y; y = i; } z = x % y; while (z) { x = y; y = z; } return (z);}int lcd(int x, int y){ int i, z, m, n; m = x * y; if (x < y) { i = x; x = y; y = i; } z = x % y; while (z) { x = y; y = z; } n = m / z; return (n);}

看走眼了,while循环出不来,z的值一直没有变化,要更新z的值,最后return的是y的值,辗转相除法

#include <stdio.h>
int main() {
    int hcf(int x, int y);
    int lcd(int x, int y);
    int a, b, c, d;
    printf("请输入两个数:");
    scanf("%d%d", &a, &b);
    c = hcf(a, b);
    d = lcd(a, b);
    printf("最大公约数:%d\n最小公倍数:%d\n", c, d);
    return 0;
}
int hcf(int x, int y) {
    int i, z;
    if (x < y) {
        i = x;
        x = y;
        y = i;
    }
    z = x % y;

    while (z) {
        x = y;
        y = z;
        z = x % y;
    }
    return (y);
}
int lcd(int x, int y) {
    int i, z, m, n;
    m = x * y;
    if (x < y) {
        i = x;
        x = y;
        y = i;
    }
    z = x % y;
    while (z) {
        x = y;
        y = z;
        z = x % y;
    }
    n = m / y;
    return (n);
}

你的代码出现错误,是因为代码有逻辑错误,在lcd里面,如果z=0,因为发生了除0,所以 在DEV-C++里面,程序发生异常,然后退出。
求最大公约数和最小公倍数,我参考网上一些资料,写了一个实现,如下:


#include <stdio.h>
int  gcd(int a, int b);
int lcm(int a, int b);



int main(void){
    
    int a , b;
    scanf("%d %d",&a,&b);
    printf("a=%d,b=%d\n",a,b); 
    int g=gcd(a,b);
    int l = lcm(a,b);
    printf("%d和%d的最大公约数是:%d\n",a,b,g); 
    printf("%d和%d的最小公倍数是:%d\n",a,b,l); 
    
}

/**
     * 辗转相减法
     * 算法参考:
     *     https://blog.csdn.net/yxdayd/article/details/44774015
    
*/
int  gcd(int a, int b){
    printf("in gcd a=%d,b=%d\n",a,b);
    while(1){
        if(a>b)
            a-=b;
        else if(a<b)
            b -=a;
        else
            return a;
    }
}


int lcm(int a, int b){
    printf("in lcm a=%d,b=%d\n",a,b);
    //最小公倍数是两数乘积除以最大公约数。
    //参考链接:https://blog.csdn.net/qq_43527632/article/details/83475439
    int gbs = a*b /gcd(a,b);
    
    return gbs;
}