使用argv在C中传递变量

时间:2017-01-19 02:26:02

标签: c while-loop argv

我在本学期用C编写微处理课程。我们的第一个小分配是计算从i = 0到函数的用户定义值N的总和(1 /(1 + i ^ 2))。我想在命令行中使用其中一个参数变量作为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的方式。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

首先,我会替换&#39;而#39;使用&#39; for&#39;,以便使代码更具可读性:

#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]);

这就是&#39; argc&#39; &#39;的argv&#39;工程...

argc 代表参数计数,它基本上是一个正整数,表示 argv 的大小,代表参数值

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

["./microp", "3"]

重要

我刚才意识到的是 argv 只接受字符串作为成员,所以当你通过&#34; 3&#34;作为参数,您的程序实际上采用其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
...

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