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

scanf(標準入力で動作する)の代わりにsscanf、文字列で動作する、を使用します。
だからそれは

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

最初のコマンドライン引数をスキャンします。

于 2012-06-17T20:27:29.380 に答える
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

プログラムに double 値を渡したいようです。ただし**argv、コマンドラインから渡された double を取得するために使用しています。しかし**argv、実際には単一の文字です。

あなたがする必要があるのは、を使用して文字列を double に変換することですatof()

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

もう 1 つの潜在的な問題は、次fabs(t - c/t)のとおりtです。0 になると、ゼロによる除算に直面する可能性があります。

于 2012-06-17T20:32:59.530 に答える
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 に答える