如何在C中将命令行参数读入双数组/向量?

时间:2017-01-19 17:53:34

标签: c argv atof

当我在C中运行程序时,我需要能够使用命令行输入几个东西。我将使用类似下面一行的命令来运行程序:

./programName 1 2.5 A.txt B.txt 0.0,0.5,1.0,1.5

然后我理想地将各种条目存储在单独的变量中。我很难将最后一组逗号分隔的数字,0.0,0.5,1.0,1.5数字存储为名为MyVector的向量。

这是我尝试过的一个例子:

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[]){

    int x = atoi(argv[1]); // x = 1
    float y = atof(argv[2]); // y = 2.5
    char *AFileName = argv[3]; // AFileName = A.txt
    char *BFileName = argv[4]; // BFileName = B.txt
    double MyVector[4] = atof(argv[5]); // MyVector = [0.0,0.5,1.0,1.5]

    printf("x = %d\n",x);
    printf("y= %f\n",y);
    printf("AFileName= %s\n",HFileName);
    printf("BFileName= %s\n",AFileName);

    for(int i=0;i<4;i++)
    {
        printf("MyVector[%d] = %f\n",i,MyVector[i]);
    }
}

除了我尝试将值存储在MyVector中的行外,所有这些工作都有效。

1 个答案:

答案 0 :(得分:4)

double MyVector[4] = atof(argv[5]); // MyVector = [0.0,0.5,1.0,1.5]

无法正常工作。

0.0,0.5,1.0,1.5是一个字符串。因此,您需要对其进行令牌化并检索每个元素,然后使用atof()进行转换。 例如,您可以使用strtok()进行标记。

double MyVector[4];
char *p = strtok(argv[5], ",");

size_t i = 0;
while(p && i<4) {
   MyVector[i++] = atof(p);
   p = strtok(NULL, ",");
}

如果您打算使用strtok(),请注意其陷阱。它修改了它的输入字符串。有关详细信息,请参阅strtok()