c - 如何将命令行参数读入 C 中的双数组/vector ?

标签 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 的 vector 。

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

#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 中的行之外,所有这些都有效。

最佳答案

这个

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()了解详情。

关于c - 如何将命令行参数读入 C 中的双数组/vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41748505/

相关文章:

c - 选择排序递归函数的段错误

c - atof 产生奇怪的结果

c - 无法将 argv[] 中的内容转换为 C 中的 float[][]

c++ - 双C++的算术错误

c - 使用 ubuntu 执行迷你 shell

c - 是否可以一起使用#define组不同的变量

cyclic Include dependency 引起麻烦,如何解决?

检查 argv 是否包含特定的文件扩展名

c - 将 argv[0] 设置为比当前分配的值更长的值

java - 使用 eclipse 在 java 中设置自定义 argv 参数大小