Ввод из командной строки
у меня есть программа на 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*
С double
s в этом случае.
вот для чего нужны аргументы командной строки:
#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
в вашем случае