10进制转16进制,为什么无输出?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int dec2hex(int n);
	int n = 0;
	printf("输入一个十进制整数:");
	scanf("%d",&n);
	printf("对应的十六进制数:");
	dec2hex(n);
	system("pause");
	return 0;
}

int dec2hex(int n)
{
	char SL[200] = { '\0' };
	int yushu = 0, i = 0;
	do
	{
		n = n / 16;
		yushu = n % 16;
		if (yushu > 9)
		{
			switch (yushu)
			{
			case 10:SL[i] = 'A'; break;
			case 11:SL[i] = 'B'; break;
			case 12:SL[i] = 'C'; break;
			case 13:SL[i] = 'D'; break;
			case 14:SL[i] = 'E'; break;
			case 15:SL[i] = 'F'; break;
			case 16:SL[i] = 'G'; break;
			default:
				break;
			}
		}
		else 
		{
			SL[i] = yushu;
		}
		i++;
	}
	while (n > 0);
	
	for (i = i - 1; i != 0; i--)
	{
		printf("%c", SL[i]);
	}
	printf("\n");
	return 0;
}

int dec2hex(int n)
{
    char SL[200] = { '\0' };
    int yushu = 0, i = 0;
    do
    {
        yushu = n % 16;                         //先%16  再/16
        n = n / 16;
        if (yushu > 9)
        {
            switch (yushu)
            {
                case 10:SL[i] = 'A'; break;
                case 11:SL[i] = 'B'; break;
                case 12:SL[i] = 'C'; break;
                case 13:SL[i] = 'D'; break;
                case 14:SL[i] = 'E'; break;
                case 15:SL[i] = 'F'; break;     //截至到15就行啦
                default:
                    break;
            }
        }
        else
        {
            SL[i] = yushu+48;           //需要加48 因为你的数组是char类型,'1'=(char)(1+48)
        }
        i++;
    }    while (n > 0);

    for (i = i - 1; i >= 0; i--)        // i>=0 你的SL[0]也是有数据的
    {
        printf("%c", SL[i]);
    }


    printf("\n");
    return 0;
}

修改三处地方。

 

n = n / 16;

yushu = n % 16;

这两句有问题啊,假设n = 18,那么n=n/16后,n就变成1了,那么yushu就是1,实际你要的yushu应该是2,原因是n=n/16改变了n的值啊

改为:

yushu = n%16;

n=n/16;

printf打印不出来的原因是你用%c,ASCII码中'0'是0x30,小于这个数,为不可见字符,所以你看不到

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html