3
#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;
}

在这个程序中,我想使用命令行参数运行。我怎样才能做到这一点?

4

6 回答 6

2

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

于 2012-06-17T20:09:41.330 回答
2

打开一个终端(命令行)并输入“gcc nameOfFile.c argument1 argument2”,但不要输入引号。您键入的每个参数都将传递给您的程序,并且可以通过 argv[0]、argv[1] 等访问

于 2012-06-17T20:12:59.150 回答
2

代替scanf(对标准输入进行操作),使用sscanf对字符串进行操作。
所以那将是

sscanf(argv[1], "%lf", &t);

扫描第一个命令行参数。

于 2012-06-17T20:27:29.380 回答
2

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

您需要做的是使用atof().

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

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

于 2012-06-17T20:32:59.530 回答
2

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

gcc filename.c

./a.out "your argument her without quotation mark"
于 2017-03-15T09:19:42.143 回答
1

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

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

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

这是一个例子:

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

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

    double x,c;
    double epsilon = 1e-15;    // relative error tolerance
    double t ; // estimate of the square root of c

    //scanf("%lf",&t);
    if (argc != 2) {
      printf ("USAGE: enter \"t\"\n")l
      return 1;
    } 
    else  if (sscanf (argv[1], "%lf", &t) != 1) {
      printf ("Illegal value for \"t\": %s\n", argv[1]);
      return 1;
    }

    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;
}
于 2012-06-17T20:27:45.620 回答