如何将命令行参数读入 C 中的双 array/vector?
How do I read in command line arguments into a double array/vector in C?
当我在 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 中的行外,所有这些都有效。
这个
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 中 运行 我的程序时,我需要能够使用命令行输入一些东西。我会 运行 使用如下命令的程序,例如:
./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 中的行外,所有这些都有效。
这个
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()
。