我正在研究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;
}
答案 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”