/***************************************************
带选项的命令行程序
此程序主要把整型转换成带选项的三种进制,二进制,8,16进制
不带选项的话,可以自己设定要怎么转进制
在DEV C++ 或 GCC 通过测试
*****************************************************/
#include
#include
#include //用于解析参数的库函数
#include
void IntToOther(char *inputstr,int optchar) /*整数转换成其他的进制数*/
{ int num,i;
char *pother;
pother = (char *)calloc(8*sizeof(int),sizeof(char)); //声明一个存放进制的字符指针
for(i=0;inputstr[i]!=0;i++) //确保输入的整数的正确,不是别的字符导致数据变为0
if (!isdigit(inputstr[i]))
{ fprintf( stderr,
"你输入的参数过多,或参数有误!\n"
"请输入 'MyItoBOX --help' 获得更多的帮助信息.\n"
);
exit(1);
}
num=atoi(inputstr); //把正确的数字字符串转换成整数
i=0;
if ( num ==0 ) pother[i++]='0';
for (;num>0;num/=optchar,i++)
{if (num%optchar>9) pother[i]+=7; //通用的公式把整数转换到optchar进制
pother[i]+=num%optchar+'0';
}
printf("\n 你输入的整数为 %s ,转换为%d进制为: ",inputstr,optchar);
for(i--;i>=0;i--) printf("%c",pother[i]); //输出转换后的进制
}
int main( int argc, char *argv[])
{
int c,n;
char *m;
char ec; //存放无效字符选项
opterr=0;
while (1) {
int option_index = 0;
static struct option long_options[] = { // 设置参数选项
{"help", 0,0, 'h'},
{"birary", 1,0, 'b'},
{"octal", 1,0, 'o'},
{"hex", 1,0, 'x'},
{0,0,0,0}
};
c = getopt_long( argc, argv, "hb:o:x:", //读取参数选项
long_options, &option_index );
if (c == -1)
break;
switch (c) {
case 'h':
printf("\nMyItoBOX 是一个整数转换成其他进制的程序\n"
"\n"
"用法: MyItoBOX [options] [要转换的整数]\n"
" -h,--help 显示帮助\n"
" -b,--birary 把整数转换成二进制\n"
" -o,--octal 把整数转换成八进制\n"
" -x,--hexadecimal 把整数转换成十六进制\n"
"\n"
"举例输入: MyItoBOX -b 5 \n"
"或多个选项 MyItoBOX -b 5 -x 14 -o 34 \n"
"如果只输入 MyItoBOX 可以转换成你自己想要的进制 \n\n "
" 此程序由乱乱编写 \n"
" 有bug请回复 maonx@163.com \n\n"
);
break;
case 'b':
IntToOther(optarg,2);
printf("\n");
break;
case 'o':
IntToOther(optarg,8);
printf("\n");
break;
case 'x':
IntToOther(optarg,16);
printf("\n");
break;
case '?': ec = (char)optopt;
printf("无效的选项字符\'%c \' ! \n"
"请输入 'MyItoBOX --help' 获得更多的帮助信息.\n",ec);
exit(1);
case ':': printf("缺少选项参数!\n"
"请输入 'MyItoBOX --help' 获得更多的帮助信息.\n");
exit(1);
default:
break;
}
}
if ( optind fprintf( stderr,
"你输入的参数过多,或参数有误!\n"
"请输入 'MyItoBOX --help' 获得更多的帮助信息.\n"
);
exit(1);
}
if (optind ==1) //如果有输入命令,进入以下的程序
{printf("\n你可以输入 'MyItoBOX --help' 获得更多此程序的使用信息.\n\n");
printf("请你输入你想要的转换的整数:");
scanf("%s",m) ;
printf("你想转换到几进制:");
scanf("%d",&n);
IntToOther(m,n); //转换进制
printf("\n\n");
}
exit(0);
}
阅读(1796) | 评论(0) | 转发(0) |