Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从命令行调用值的简单方法?_C - Fatal编程技术网

C 从命令行调用值的简单方法?

C 从命令行调用值的简单方法?,c,C,我目前有: int main(int argc, char* argv[]){ char* array = argv[1]; char* test = argv[2]; char*p; char*q; long check; long checker; check = strtol(array, &p, 3); checker = strtol(test, &q, 3); printf("Check: %ld\n", che

我目前有:

int main(int argc, char* argv[]){
   char* array = argv[1];
   char* test = argv[2];
   char*p;
   char*q;
   long check;
   long checker;

   check = strtol(array, &p, 3);
   checker = strtol(test, &q, 3);
   printf("Check: %ld\n", check);
}
在每次调用新值时不必创建新变量(p、q、check、checker),从命令行调用值的更快/更有效的方法是什么?ie…/程序1 2 3


另外,为什么“/program-9 2 3”中的-9这样的值返回0?

为什么
-9
失败?因为您为
strtol()
指定了一个
三元
输入,它只使用数字
0..2

在一个循环中进行比较简单

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    long check = 0;
    int i;
    for (i=1; i<argc; i++) {
        check = strtol(argv[i], NULL, 3);
        printf("arg %d = %ld\n", i, check);
    }
    return 0;
}
您是否将
3
传递到
strtol()
,因为您认为您正在从命令行传递3个输入?如果您不是真的希望输入为
三值
,那么此修订版应该满足您的要求

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    long check = 0;
    int i;
    for (i=1; i<argc; i++) {
        check = atol(argv[i]);
        printf("arg %d = %ld\n", i, check);
    }
    return 0;
}

你必须再加一点。p、q、check、checker的用途是什么?为什么要将
%ld
格式化指令与
test
一起使用,这是一个
字符*
类型的对象?这是未定义的行为。@YasirMajeed:它们只是用来转换输入到参数中的数字(学习C的第一天我不确定这是否是你问的问题for@BLUEPIXY@Fuzxxl我的错误是,修改了代码,然后是使用atoi和atol等函数的最佳解决方案。这些函数分别将字符串转换为int和long。而不是首先将它们复制到char*,而是直接将argv[i]转换为atol(argv[index])对不起,我是个新手,strtol的三元输入到底是什么?我通过了3,因为我认为它应该表示“三位数”编辑:刚刚看到您所做的编辑,这正是我想要的。三元是输入字符串所使用的基数。例如,二进制、三元、八进制、十进制、十六进制。如果您将
10
而不是
3
,则可以工作。但是
strtol()
仅转换一个数字。
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    long check = 0;
    int i;
    for (i=1; i<argc; i++) {
        check = atol(argv[i]);
        printf("arg %d = %ld\n", i, check);
    }
    return 0;
}
F:\WORK\MYTOOLS\CTEST>test -9 2 3 111
arg 1 = -9
arg 2 = 2
arg 3 = 3
arg 4 = 111