一段求最大公约数和最小公倍数的代码,求改错解决方法

一段求最大公约数和最小公倍数的代码,求改错
C/C++ code

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    int m,n,temp,p,r;
    printf("输入两个数字m,n:\n");
    scanf("%d,%d",&m,&n);
    if(m>n)
    {
        temp=m;
        m=n;
        n=temp;
    }
    p=n*m;
    while(m!=0)
    {
        r=n%m;
    }
    printf("m和n的最大公约数为: %d\n",r);
    printf("m和n的最小公倍数为: %d\n",p/r);

    return 0;
}



------解决方案--------------------
while(m!=0)
{
r=n%m;
}

若m不等于0,则持续计算r=n%m
死循环

建议楼主学会单步调试——说是这么说,我真不能理解为什么有人不会
------解决方案--------------------
C/C++ code

// 1016.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    int m, n; 
    int m_cup, n_cup, res; /*被除数, 除数, 余数*/ 
    printf("Enter two integer:\n"); 
    scanf("%d %d", &m, &n); 
    if (m > 0 && n >0) 
    { 
        m_cup = m; 
        n_cup = n; 
        res = m_cup % n_cup; 
        while (res != 0) 
        {  
            m_cup = n_cup; 
            n_cup = res; 
            res = m_cup % n_cup; 
        } 
        printf("Greatest common divisor: %d\n", n_cup); 
        printf("Lease common multiple : %d\n", m * n / n_cup); 
    } 
    else printf("Error!\n"); 
    return 0; 
}