在 C 中使用 argv 传递变量

Using argv to pass variable in C

我这学期正在用 C 编写微处理 class。我们的第一个小任务是计算从 i=0 到函数 (1/(1+i^2)) 的用户定义值 N 的总和。我想将命令行上的参数变量之一作为 N 的值传递,以便用户可以从命令行执行我的程序(这是我教授的要求)。这是我的代码:

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

int main(int argc, char *argv)
{
    int i = 0;
    float sum = 0;

    while (argv[1] >= i)
        { 
        sum += 1/(1+pow(i,2));
        i++;
        }
    printf("%f",sum);
    printf("%c",argv[-1]);
    getchar();
}

此代码保存为microp.c,我在终端中使用gcc编译代码。我的终端命令如下:

$ gcc microp.c -o microp -lm 
$ ./microp 3

我使用参数 3 作为值 N(我求和的上限)。我的程序运行时没有编译错误,但没有给出正确的结果。当我在代码中简单地给 N 一个值时,代码给了我正确的答案。我怀疑是因为我使用 argv 的方式。有什么建议吗?

首先,我会将 'while' 替换为 'for',以使代码更具可读性:

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

int main(int argc, char *argv)
{
    int i = 0;
    float sum = 0;

    for (i=0;i<=argv[1];i++)
    { 
        sum += 1/(1+pow(i,2));
    }
    printf("%f",sum);
    printf("%c",argv[-1]); //this over here, what is it for?
    getchar();
}

其次,我会删除第二个 printf 语句,或者至少添加一个换行符,我真的不知道 argv[-1] 应该是什么,因为它看起来越界

printf("%f \n ",sum);
//printf("%c \n ",argv[-1]);

这就是 'argc' 'argv' 的工作方式...

argc 代表 argument count,它基本上是一个正整数,表示 argv[= 的大小39=],代表参数值

因此,您的 argv[] 域将从 0 -> (argc-1) 请记住,仅仅执行程序本身就算作一个参数,argv[0]... 所以调用 ./microp 3 会产生一个包含以下内容的 argv 数组:

["./microp", "3"]

重要

我刚刚意识到 argv 只接受字符串作为成员,所以当你将“3”作为参数传递时,你的程序实际上采用它的 ASCII 值,所以尝试在之前做一些验证,或者只是转换它

 int main(int argc, char *argv)
{
    int i = 0;
    float sum = 0;
    argv[1]=atoi(argv[1]); //this is just an example of string to int conversion
...

如果还有问题,请告诉我,祝你好运=)