运行c程序的命令行参数 #包括 #包括 int main(int argc,字符**argv){ //读入命令行参数 双x,c; 双ε=1e-15;//相对误差容限 double t;//c的平方根的估计 //扫描频率(“%lf”、&t); t=**argv-'0'; printf(“%lf”,t); c=t; //重复应用牛顿更新步骤,直到达到所需的精度 while(fabs(t-c/t)>ε*t){ t=(c/t+t)/2.0; } //打印出c的平方根估计值 printf(“%lf”,t); 返回0; }

运行c程序的命令行参数 #包括 #包括 int main(int argc,字符**argv){ //读入命令行参数 双x,c; 双ε=1e-15;//相对误差容限 double t;//c的平方根的估计 //扫描频率(“%lf”、&t); t=**argv-'0'; printf(“%lf”,t); c=t; //重复应用牛顿更新步骤,直到达到所需的精度 while(fabs(t-c/t)>ε*t){ t=(c/t+t)/2.0; } //打印出c的平方根估计值 printf(“%lf”,t); 返回0; },c,C,在这个程序中,我想使用命令行参数运行。我该怎么做呢?命令行参数的数量在argc中。每个参数都在argv[0],argv[1]等中。通常,argv[0]包含可执行文件的名称。打开终端(命令行)并键入“gcc nameofile.c argument1 argument2” 不过,不要键入引号。您键入的每个参数将被传递到您的程序中,并且可以由argv[0]、argv[1]等访问而不是scanf(在标准输入上操作),使用sscanf,它在字符串上操作。 那就是 #include<stdio.h&

在这个程序中,我想使用命令行参数运行。我该怎么做呢?

命令行参数的数量在
argc
中。每个参数都在
argv[0]
argv[1]
等中。通常,
argv[0]
包含可执行文件的名称。

打开终端(命令行)并键入“gcc nameofile.c argument1 argument2”
不过,不要键入引号。您键入的每个参数将被传递到您的程序中,并且可以由argv[0]、argv[1]等访问而不是
scanf
(在标准输入上操作),使用
sscanf
,它在字符串上操作。
那就是

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

int main(int argc, char **argv){

    // read in the command-line argument
    double x,c;
    double epsilon = 1e-15;    // relative error tolerance
    double t ; // estimate of the square root of c
    //scanf("%lf",&t);
    t=**argv-'0';
    printf("%lf ",t);
    c=t;
    // repeatedly apply Newton update step until desired precision is achieved
    while (fabs(t - c/t) > epsilon*t) {
        t = (c/t + t) / 2.0;
    }
    // print out the estimate of the square root of c
    printf("%lf",t);

    return 0;
}
要扫描第一个命令行参数。

1)您需要使用argc(命令行参数)和argv[](参数本身)

2) 在访问命令行变量之前检查argc总是一个好主意(即,在尝试使用命令行参数之前,确保您实际获得了该参数)

3) 有几种方法可以将命令行参数(字符串)转换为实数。一般来说,我更喜欢“sscanf()

下面是一个例子:

sscanf(argv[1], "%lf", &t);
#包括
#包括
int main(int argc,字符**argv){
双x,c;
双ε=1e-15;//相对误差容限
double t;//c的平方根的估计
//扫描频率(“%lf”、&t);
如果(argc!=2){
printf(“用法:输入\“t\”\n”)l
返回1;
} 
else if(sscanf(argv[1],%lf“,&t)!=1){
printf(“t”的非法值:%s\n,argv[1]);
返回1;
}
printf(“%lf”,t);
c=t;
//重复应用牛顿更新步骤,直到达到所需的精度
while(fabs(t-c/t)>ε*t){
t=(c/t+t)/2.0;
}
//打印出c的平方根估计值
printf(“%lf”,t);
返回0;
}

看起来您想向程序传递一个双精度值。但是您正在使用
**argv
检索从命令行传递的双精度数据。但是,
**argv
实际上是一个字符

您需要做的是使用
atof()
将字符串转换为double


另一个潜在问题是:
fabs(t-c/t)
如果
t
变为0,您可能会面临被零除的问题

要从终端运行命令行参数,需要使用以下语法

t = atof(argv[1]); // argv[1] is the 1st parameter passed.

x
在您的程序中起什么作用?谢谢大家回答我。我得到了答案。我使用nameOfFile.exe 0 2执行此操作,但它不起作用。它总是给出结果67.000000 8.185353。
t = atof(argv[1]); // argv[1] is the 1st parameter passed.
gcc filename.c

./a.out "your argument her without quotation mark"