使用argv在C中传递变量
这学期我在为一门微处理器课程用C语言编写代码。我们的第一个小赋值是计算从i=0到函数(1/(1+i^2))的用户定义值N的总和。我想将命令行上的一个参数变量作为N的值传递,这样用户就可以从命令行执行我的程序(这是我的教授的要求)。这是我的密码:使用argv在C中传递变量,c,while-loop,argv,C,While Loop,Argv,这学期我在为一门微处理器课程用C语言编写代码。我们的第一个小赋值是计算从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;
#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();
}
我使用参数3作为值N(总和的上限)。我的程序运行时没有编译错误,但没有给出正确的结果。当我在代码中简单地给N一个值时,代码给出了正确的答案。我怀疑这是因为我使用argv的方式。有什么建议吗?首先,我将用“for”替换“while”,以使代码更具可读性:
#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();
}
这就是“argc”“argv”的工作原理。。。 argc表示参数计数,它基本上是一个正整数,表示参数值argv的大小 因此,您的argv[]域将从0->(argc-1) 请记住,仅仅执行程序本身就算作参数argv[0]。。。 因此,调用/microp3将生成包含以下内容的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
...
如果您还有其他问题,请告诉我,祝您好运=)
argv[1]
-->atoi(argv[1])
。另外,argv[-1]
是UB。argv
是字符串列表。您需要将这些字符串值转换为数值,然后才能像在上面的代码中一样使用它们。命令行参数不是这样工作的。首先尝试一个更简单的程序,直到您对它们感到满意。char*argv
Zzzztttt。尝试char*argv[]
如果您传递的数字超过一个数字,它将崩溃,因为ASCII值仅用于单个字符,这是您应该转换它的另一个原因main
的原型是int main(int argc,char*argv[])
。您可以编写char**argv
。但是,char*argv
不起作用。因此我使用@Mr.Robot建议转换类型,但atoi()似乎给我带来了一个错误:警告:传递'atoi'的参数1会使指针从整数变为无强制转换[-Wint conversion]N=atoi(argv[1])代码>^另外:/usr/include/stdlib.h:147:12:注意:应为“const char*”,但参数的类型为“char”extern int atoi(const char*u nptr)
我试图查找char和const之间的差异,但我仍然不明白为什么类型转换不起作用!我得到了它。使用机器人先生的建议,然后最终注意到@John3136所指出的内容。错误是因为在main的参数中仅放置*argv而不是*argv[]。真的。
["./microp", "3"]
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
...