Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363747
  • 博文数量: 84
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 940
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-12 20:30
文章分类

全部博文(84)

文章存档

2010年(18)

2009年(27)

2008年(39)

我的朋友

分类: C/C++

2009-04-01 22:49:37

/***************************************************
带选项的命令行程序
此程序主要把整型转换成带选项的三种进制,二进制,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);
}
阅读(1760) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~