初学者请问!

菜鸟请教!!!
#include <iostream.h>
void   trans(int,int);
void   main()
{
int   n,sel;
cout < < "输入一个整数: ";
cin> > n;
do
{
cout < < "输出进制:2,8,16,32(输入0时退出): ";
cin> > sel;
switch(sel)
{
case   2:trans(n,2);break;
case   8:trans(n,8);break;
case   16:trans(n,16);break;
case   32:trans(n,32);break;
case   0:break;
default:cout < < "输入错误 " < <endl;
}
}while(sel!=0);
}
void   trans(int   n,int   base)
{
int   num[20],i=0,j,m=n;//将最终进制数的各位放在数组中
do
{
i++;
num[i]=m%base;
m=m/base;

}while(m!=1);
cout < < "** " < <n < < "转换成 " < <base < < "进制的结果是: ";
for(j=i;j> =1;j--)
if(num[j] <10)
cout < <num[j];
else
cout < <char(num[j]+ 'A '-10);//超过10的位转换为字符输出
cout < <endl;
}


请问哪里出了问题呢,结果总是不符实际。

------解决方案--------------------
while(m!=0)
------解决方案--------------------
void trans(int,int);
int main()
{
int n,sel;
cout < < "输入一个整数: ";
cin> > n;
do
{
cout < < "输出进制:2,8,16,32(输入0时退出): ";
cin> > sel;
switch(sel)
{
case 2:trans(n,2);break;
case 8:trans(n,8);break;
case 16:trans(n,16);break;
case 32:trans(n,32);break;
case 0:break;
default:cout < < "输入错误 " < <endl;
}
}while(sel!=0);

system( "PAUSE ");
return 0;
}

void trans(int n,int base)
{
int num[20],i=0,j,m=n;//将最终进制数的各位放在数组中
do
{
i++;
num[i]=m%base;
m=m/base;
}while(m!=0);
cout < < "** " < <n < < "转换成 " < <base < < "进制的结果是: ";
for(j=i;j> =1;j--)
if(num[j] <10)
cout < <num[j];
else
cout < <char(num[j]+ 'A '-10);//超过10的位转换为字符输出
cout < <endl;
}
------解决方案--------------------
system( "pause ")就是执行Dos命令pause,等待用户输入。
---------------百度搜的。。。。。
------解决方案--------------------
赞同 AiNiLife(我要变强)

while (m!=0);

我的测试结果:
输入一个整数:12
输出进制:2,8,16,32(输入0时退出):2
**12转换成2进制的结果是:1100
输出进制:2,8,16,32(输入0时退出):8
**12转换成8进制的结果是:14
输出进制:2,8,16,32(输入0时退出):16
**12转换成16进制的结果是:C
输出进制:2,8,16,32(输入0时退出):32
**12转换成32进制的结果是:C