程序运行准确,但是自己笔下算就不正确,求解答

程序运行正确,但是自己笔下算就不正确,求解答
程序如下
#include<stdio.h>
int main()
{int p,r,n,m,temp;
 printf("请输入两个正整数n,m:");
 scanf("%d,%d",&n,&m);
 if(n<m)
 {temp=m;
  m=n;
  n=temp;
 }
 p=n*m;
 while(m!=0)
 {r=n%m;
  n=m;
  m=r;
 }
 printf("他们的最大公约数为:%d\n",n);
 printf("他们的最小公倍数为:%d\n",p/n);
 return 0;
}

楼主假设n=30,m=20,那就跳过了if语句,直接到下面的p=n*m=600了,接下来的while就发现问题了,r是n除以m的余数,那么就是r=10,接下来的语句n=m,然后把m赋给n,那么n是等于20呀,这样想的话输出的最大公约数是20,是错的,但是就是找不到问题在哪里,求解呀
------解决思路----------------------
你怎么能够只算一次呢?

你要一直算到下面这个不成立才能够退出,否则一直在里面除下去。
while(m!=0)

你说的算到n=20时,m就是10了。while(m!=0)这个继续成立,所以又进入里面了。