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