进制转换器:
功能:用户输入进制数,然后输入数字,将该 进制数的数字转换成十进制数进行输出。
语言:C语言。
要实现这一功能,其实并不复杂,我们只要了解两个C语言的库函数即可。
下面我先给出代码,大家结合代码中的注释先了解一下这个过程,然后我来带大家认识一下这两个函数的基本功能。
//进制转换器
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
void menu()
{
printf("****************\n");
printf(" 请输入进制数1~36\n");
printf(" 输入0即可退出 \n");
printf("****************\n");
}
int main()
{
int num = 0;//数字
int input = 0;//进制数
char str[100000];//进制数的字符存储
//while循环有利于更好的人机交互
while (1)
{
menu();
scanf("%d", &input);
if (input == 0)
break;
printf("请输入数字:>");
scanf("%d", &num);
itoa(num, str, 10);//讲输入的数字转换成字符存放在str的字符数组中,以便strtol进行进制的转换
//注意对于123asd这样的输入,strtol只会处理字符前面的正常数据-123
long ret = strtol(str, NULL, input);
printf("%d进制的%d的十进制数字是:%ld\n", input, num, ret);
system("pause");
system("cls");
}
printf("Bey!\n");
return 0;
}
先来介绍一下itoa函数,这个函数不难理解,其实就是将输入的数字转换成字符存储在数组中,为什么要将数字转换成字符串呢?
再来看另外一个函数strtol。
这个函数的参数要求是将base进制的char*的str转换成十进制数。返回值的类型是long int 类型。
这也就是为什么我们需要itoa函数将输入的数字转换成字符串存储在str数组中了,至于strtol函数中的第二个参数endprt是处理str中非数字字符的,也就是当str中含有数字字符和非数字字符时(比如ABCD),非数字会被放在endptr中,但是我们可以不在乎这一点,所以我直接将该位置设置为NULL。
有关这两个函数的更多细节部分,大家可以去这个网站上学习——https://cplusplus.com/
这个网站更新了,但是没有老版的方便,大家点击右上角切换到老版,在搜索框里输入自己要查询的函数名就OK了。