C语言 打印最大公约数结果有误

问题遇到的现象和发生背景 C语言起步的同学,不确定while语句和if语句的用法。请各位家人多多指教。
问题相关代码,请勿粘贴截图

img



#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int m = 0;
int n = 0;
int i = 0;
if(m<n)
{
int tmp = m;
m = n;
n = tmp;
}
if(m%n = 0)
{
printf(”最大公约数是n",n);
}
else
{
while(m%n == i)
{
m = n;
n = i;
if(m%n == 0)
{
printf("最大公约数是n",n);
break;
}
}
}
return 0;
}
 
运行结果及报错内容 打印的结果是“最大公约数是n"

img

我的解答思路和尝试过的方法 运用视频中所讲的辗转相除法,但是我的代码和答案不一样,答案显得更为精炼。不过我还是想知道自己哪里出了问题。
我想要达到的结果 打印出正确的经过计算得来的公约数

int main()
{
    int a,b;
    int c=0;
    scanf("%d %d", &a, &b);
    while (c = a % b)
    {
        a = b;
        b = c;
    }
    printf("%d\n", b);
    return 0;

}

这个是我写的代码,你可以看看~

你的程序里i一直不变,永远是0吗

#include <stdio.h>

void swap(int *a, int *b)
{
    int t = *a;
    *a = *b;
    *b = t;
}

int gcd(int a, int b)
{
    if (a > b)
        swap(&a, &b);
    int r = b % a;
    if (r == 0)
        return a;
    return gcd(r, a);
}

int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d", gcd(a, b));
    return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int m,n,i;
    scanf("%d%d", &m, &n);
    if (m<n)
    {
        m = m^n;
        n = m^n;
        m = m^n;
    }
    while (i=m%n)
    {
        m = n;
        n = i;
    }
    printf("最大公约数是%d", n);
    return 0;
}

printf那里第一个n换成%d