Как передать основные аргументы в другую функцию? - PullRequest
0 голосов
/ 16 марта 2020

Меня попросили написать программу, которая получает 3 аргумента из консоли и затем использует эти значения для оценки значения какой-либо другой функции. Я действительно не знаю, как я могу использовать эти значения в какой-то другой функции. Я пытался сделать что-то подобное, но это не работает:

#include <iostream>

using namespace std;

void logis(double a, double xz, int n){
    if (n == 0){return;}
    else{
        double x = a*xz(1-xz);
        logis(a, x, n-1);
        cout << n << "  " << x << endl;
    }
}

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

    if (argc != 4){
        cout << "You provided 2 arguments, whereas you need to provide 3. Please provide a valid number of parameteres";
    }
    else{
        double a = argv[1];
        double x0 = argv[2];
        int n = argv[3];
        logis(a, x0, n);
    }

return 0;
}

Может ли кто-нибудь помочь мне с этим? Меня пока не беспокоит, работает ли функция или нет, я просто не могу передать эти значения своей функции.

1 Ответ

1 голос
/ 16 марта 2020

Вам необходимо включить заголовок <cstdlib>

#include <cstdlib>

и использовать функции strtod и strtol (или atoi). Например,

    double a = std::strtod( argv[1], nullptr );
    double x0 = std::strtod( argv[2], nullptr );
    int n = std::atoi( argv[3] );

Вот демонстрационная программа

#include <iostream>
#include <cstdlib>

int main() 
{
    const char *s1 = "123.45";
    const char *s2 = "100";

    double d = std::strtod( s1, nullptr );
    int x = std::atoi( s2 );
    std::cout << "d = " << d << ", x = " << x << '\n';

    return 0;
}

Ее вывод

d = 123.45, x = 100

, если вместо второго параметра, равного nullptr, указать действительный указатель, то вы также можете проверить, что строка действительно содержит действительное число. См. Описание функций.

Другой подход заключается в использовании стандартных строковых функций std::stod и std::stoi, объявленных в заголовке <string>, например,

double d = 0;

try
{
    d = std::stod( argv[1] );
}
catch ( const std::invalid_argument & )
{
    // .. some action
}
...