Ввод из командной строки

у меня есть программа на C++, который я запускаю для многих значений параметра. Я хочу сделать следующее:: Допустим, у меня есть два параметра:

int main(){
    double a;
    double b;
//some more lines of codes
}

теперь после компиляции я хочу запустить его как

./output.out 2.2 5.4

, так что a принимает значение 2,2 и b принимает значение 5.4.

конечно, один из способов-это использовать cin>> но я не могу этого сделать, потому что я запустить программу на кластере.

5 ответов


вам нужно использовать аргументы командной строки в своем main:

int main(int argc, char* argv[]) {
    if (argc != 3) return -1;
    double a = atof(argv[1]);
    double b = atof(argv[2]);
    ...
    return 0;
}

этот код анализирует параметры с помощью atof, вы могли бы использовать stringstream.


если вы хотите использовать параметры командной строки, то нет, вы не использовать cin Как стало слишком поздно. Вам нужно изменить свой main подпись:

int main(int argc, char *argv[]) {
    // argc is the argument count
    // argv contains the arguments "2.2" and "5.4"
}

так у вас теперь есть argv который является массивом указателей на char каждый указатель указывает на аргумент, который был принят. Первый аргумент обычно является путем к исполняемому файлу, последующие аргументы-это все, что было передано при запуске приложения, в виде указателей на char.

вам нужно будет преобразовать char*С doubles в этом случае.


вот для чего нужны аргументы командной строки:

#include <sstream>

int main(int argc, char *argv[])
{
    if (argv < 3)
       // show error
    double a, b;

    std::string input = argv[1];
    std::stringstream ss = std::stringstream(input);

    ss >> a;

    input = argv[2];
    ss = std::stringstream(input);

    ss >> b;

    // a and b are now both successfully parsed in the application
}

вы смотрели параметры программы boost?

Он примет аргументы командной строки, как и многие другие, и позволит вам обеспечить очень последовательный, чистый и расширяемый интерфейс командной строки.


вы можете использовать эту форму main() функция для получения аргументов командной строки

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

    } 

где значения argv[] массив содержит переменные командной строки как char* что вам нужно будет преобразовать в floats или doubles в вашем случае