2012-06-17 2 views
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; 
} 

В этой программе я хочу запустить с аргументом командной строки. Как я могу это сделать?аргумент командной строки для запуска программы c

+1

Что 'x' сделать в вашей программе? –

+0

Спасибо всем вам, что ответили мне. Я получил свой ответ. – Moshii

ответ

1

Откройте терминал (в командной строке) и введите «gcc nameOfFile.c argument1 argument2» , однако не вводите кавычки. Каждый аргумент, который вы вводите, будет передан вашей программе, и к нему могут быть доступны argv [0], argv [1] и т. Д.

+0

Я делаю это с именемOfFile.exe 0 2, но он не работает. Он всегда дает результат 67.000000 8.185353. – Moshii

2

Число аргументов командной строки находится в argc. Каждый аргумент находится в argv[0], argv[1] и т. Д. Обычно argv[0] содержит имя исполняемого файла.

2

Вместо scanf (который работает на стандартном вводе) используйте sscanf, который работает с строкой ,
Так что бы

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

отсканировать первый аргумент командной строки.

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; 
} 
2

Похоже, вы хотите передать двойное значение для вашей программы. Но вы используете **argv для извлечения двойника, переданного из командной строки. Но **argv действительно является единственным символом.

Что вам нужно сделать, это преобразовать строку в двойную, используя atof().

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

Другой потенциальный вопрос здесь: fabs(t - c/t) Если t когда-либо становится равным 0, вы можете столкнуться с деления на ноль.

2

Чтобы запустить аргумент командной строки из терминала, который вы должны использовать этот синтаксис

gcc filename.c 

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