Перейти к основному содержимому

Параметры командной строки

Параметры запуска передаются программе и настраивают симулятор робота

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

Коротко

Параметры командной строки приходят в main через argc и argv. argc хранит количество частей запуска. argv хранит сами части как текст.

Обычный main и main с параметрами

Раньше мы писали:

int main() {
return 0;
}

Для параметров запуска пишут так:

int main(int argc, char* argv[]) {
return 0;
}

argc — количество аргументов. argv — массив текстовых аргументов.

Вывести количество аргументов

#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
cout << argc << endl;
return 0;
}

Запуск:

./main test fast

Обычно программа выведет 3: имя программы, test, fast.

Вывести аргументы

#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
int i = 0;

for (i = 0; i < argc; i++) {
cout << argv[i] << endl;
}

return 0;
}

Пример запуска:

./main test fast

Возможный вывод:

./main
test
fast

argv[0] обычно содержит имя запускаемой программы. Не используйте его для важной логики.

argv похож на массив строк запуска

Проверка количества

#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
if (argc < 2) {
cout << "mode missing" << endl;
return 1;
}

cout << "mode = " << argv[1] << endl;
return 0;
}

Перед чтением argv[1] нужно проверить, что такой элемент существует.

Простое чтение числа

Аргументы командной строки приходят как текст. Чтобы получить число, можно разобрать строку вручную. Это учебный вариант без дополнительных библиотек.

#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
int i = 0;
int n = 0;

if (argc < 2) {
cout << "number missing" << endl;
return 1;
}

while (argv[1][i] != '\0') {
if (argv[1][i] < '0' || argv[1][i] > '9') {
cout << "bad number" << endl;
return 1;
}

n = n * 10 + (argv[1][i] - '0');
i = i + 1;
}

cout << n << endl;
return 0;
}

Здесь используется то, что символы цифр идут подряд: '0', '1', ..., '9'.

Когда использовать параметры запуска

ЗадачаПодходит ли
выбрать режим тестада
передать имя файлада
вводить много измеренийлучше файл
вести диалог с пользователемлучше cin
менять настройки во время работылучше cin или меню

Практика

  1. Напишите программу, которая выводит argc.
  2. Выведите все элементы argv через цикл.
  3. Проверьте, что argv[1] существует перед использованием.
  4. Передайте режим test и выведите его.
  5. Передайте число и разберите его учебным способом.

Проверьте себя

  1. Что хранит argc?
  2. Что хранит argv?
  3. Почему argv[1] нельзя читать без проверки?
  4. Почему аргумент запуска сначала является текстом?
  5. Когда параметры командной строки удобнее cin?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

  • формулируете основную мысль своими словами;
  • называете важные условия, ограничения или меры безопасности;
  • для схемы, кода или расчёта показываете ход решения и ожидаемый результат.

Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.

Словарь статьи

ТерминЗначение
параметр командной строкичасть команды запуска после имени программы
argcколичество аргументов запуска
argvмассив текстовых аргументов
argv[0]обычно имя программы
символ конца строки\0, признак конца C-строки

Связанные темы

Источники