/*
* 文件名:baseConvert.c
* 功能描述:实现将10进制整数转换为进制大于1的数
* 编辑人:王廷云
* 编辑日期:2017-1-1
*/
#include <stdio.h>
void convertBase(int num, int base); // 通用进制转换函数
/* 从主函数开始 */
int main(void)
{
int num;
int base; // 需要转换的进制
fprintf(stdout, "请输入需要转换的正整数:");
/* 获取用户需要转换的正整数 */
while (1)
{
if (fscanf(stdin, "%d", &num) != 1) // 检查输入是否为整数
{
fprintf(stderr, "输入错误!请输入正整数:");
while (getchar() != '\n'); // 去掉多余的非法字符
continue;
}
else if (num < 0) // 检查输入是否为正数
{
fprintf(stderr, "输入错误!请输入正整数:");
continue;
}
else
{
break;
}
}
/* 获取用户需要转换的进制 */
fprintf(stdout, "请输入需要转换的进制(大于1):");
fflush(stdout); // 为了避免缓冲区的bug而及时刷出
while(1)
{
if (fscanf(stdin, "%d", &base) != 1) // 检查输入是否为整数
{
fprintf(stderr, "输入错误!请输入正确的进制(大于1):");
fflush(stdout);
while (getchar() != '\n'); // 去掉多余的非法字符
continue;
}
else if (base <= 1) // 进制必须大于1
{
fprintf(stderr, "输入错误!请输入正确的进制(大于1):");
while (getchar() != '\n'); // 去掉多余的非法字符
continue;
}
else
{
break;
}
}
/* 调用转换函数并打印结果 */
fprintf(stdout,"10进制数%d转换为%d进制数为: ", num, base);
convertBase(num,base);
fputc('\n', stdout);
return 0;
}
/*
* 函数名:convertBase
* 函数功能:把10进制数转换为指定的进制数
* 参数:1.需要转换的10进制整数 2.需要转换的进制
* 返回值:无
*/
void convertBase(int num, int base)
{
/* 第归结束条件 */
if (num == 0)
{
return;
}
else
{
convertBase(num/base, base);
}
/* 打印结果 */
if (base == 16) // 处理16进制的特殊情况:16进制包含字母
{
fputc("0123456789abcdef"[num%base], stdout);
}
else // 其它进制:直接打印
{
fprintf(stdout, "%d", num%base);
}
}
【C语言】之实现整数的通用进制转换
最新推荐文章于 2024-04-25 19:50:57 发布