在命令行中定义输入类型

时间:2016-10-28 10:46:17

标签: c linux

我正在研究C中的一些项目。到目前为止,我所做的是从命令行读取参数,而不是返回最小或最大数。例如:

./find -m -M 1 3 4 5
The smallest number is: 1
The biggest number is 5

我想要做的是添加标志't'(在交换机情况't'),所以当我运行脚本时,我可以在整数和浮点数之间进行选择。例如:

./find -m -t float 1.2 4.5 1.9 2.3
The smallest number is: 1.2

或整数相同的事情。

感谢您的帮助。

简短格式代码:

int main(int argc, char *argv[]){
int array[30];

int x = 0;
while ((x = getopt(argc, argv, "htm")) != -1 )
{
    switch(x)
    {
    case 'h' :
        printf("Help.\n");
        break;
    case 't':
        break;
    case 'm' :
        for(int a = optind; a < argc; a++)
        {
            array[a] = atoi(argv[a]);
        }
        for (int i = optind; i < argc; i++)
        {
            for (int j = optind; j < argc - 1; j++)
            {
                if (array[j] > array[j + 1])
                {
                    int temp = arrray[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
        printf("The smallest one: %d\n", array[optind]);
        break;
   }
}
return 0;
}

1 个答案:

答案 0 :(得分:0)

一个非常快速的解决方案可能是:

int type = 0;

// parse the arguments
if (argc > 1){
    for (int i = 0; i < argc; i++){
        if (!(strcmp(argv[i],'-t')))
           if (!(strcmp(argv[i+1],'float')))
                type = 1; 
    }
}

然后检查type是否为0使用int或者它是否使用float。 它不漂亮,你当然需要进行一些检查,而不是盲目地采取argv [i + 1],但它很容易编写并且它有效(减去可能是一些错字,因为我写得非常快)

P.S。我从来没有使用过getopt但是因为你不需要使用strcmp它可能会更容易

此外,该开关只能用于字符,所以要在字符串[0]上使用它,你必须在字符串[0]上使用它然后你会接受每个以“i”或“f”开头的字符串“int”和“float”