Функция main может иметь тип возвращаемого значения int (задает код возврата программы операционной системе, он может использоваться в пакетных командных файлах или при запуске процесса из другого процесса). В предыдущих примерах функция main не имела параметров или эти параметры не использовались, но эта функция, кроме случая, когда список ее параметров пустой, может иметь три параметра или два параметра, третий может отсутствовать, например,
void main(int argc, char *argv[], char *envp[])
{ …. }
Первые два параметра передают аргументы через командную строку (количество аргументов и массив строк).
Третий параметр envp – задает контекст (среду выполнения), т.е. задает значения переменных среды окружения, переменные находятся в массиве строк, каждая переменная среды окружения это отдельная строка.
Ниже в примере выводятся на печать параметры командной строки (в любом случае существует хотя бы один параметр – это имя исполняемого файла) и возможные переменные среды окружения при запуске программы на некотором компьютере под управлением ОС Windows 7 (в разных средах они могут быть разными), результаты вывода представлены на рисунке 5.
#include
#include
void main(int argc, char *argv[], char *envp[])
{
int i;
setlocale(LC_ALL, rus); // Возможность вывода русских символов в кодировке
// Windows-1251 на консоль
printf(argc=%d, argc); // Печатаем число параметров командной строки
// Печатаем параметры командной строки
for (i = 0; i
// Печатаем переменные среды окружения
for (i = 0; envp[i]; i++) printf(\n%s, envp[i]);
}
Рисунок 5 – Пример вывода параметров командной строки и переменных среды окружения
Задачи и порядок выполнения работы
Обратить внимание, что в каждом задании указано – какую подзадачу должна решать разрабатываемая функция. Исходные данные (n, m и др.) программа должна получать через аргументы командной строки (параметры функции main). Если в задании необходимо в качестве исходных данных использовать массивы, то их сформировать с помощью генератора псевдослучайных чисел (размерности массивов программа получает через аргументы командной строки). Вывести на экран исходные данные и полученные результаты. На примере с небольшой размерность провести контрольный расчет для проверки работоспособности алгоритма.
Пример выполнения работы
Условие задачи:
Решить задачу, используя функцию.
Даны два натуральных числа a и b – числитель и знаменатель дроби. Сократите дробь, разделив числа на их наибольший общий делитель (НОД). Функция должна находить НОД 2- х чисел по алгоритму Евклида.
Алгоритм Евклида:
1. Вычислим r — остаток от деления числа a на b (ab), a = bq+r, 0
2. Если r = 0, то b есть искомое число (НОД).
3. Если r != 0, то заменим пару чисел (a, b) парой (b, r), и перейдем к шагу 1.
Для решения задачи в среде Microsoft Visual Studio 2013 было создано стандартное консольное приложение (проект типа Win32 Console Application) с установленным свойством «пустой проект» (Empty project). В проект добавлен файл с расширением .cpp, исходный код которого приведен ниже.
Листинг программы с комментариями:
#include
#include
#include
unsigned Evklid(int a, int b)
{
// Находим НОД для а и b
int a1, b1;
if (ab)
{
a1 = a; b1 = b;
}
else
{
a1 = b; b1 = a;
}
int o;
do
{
o = a1 % b1;
if (o == 0) return b1;
a1 = b1;
b1 = o;
} while (1);
}
int main(int argc, char *argv[])
{
int a, b, // Исходные данные — числитель и знаменатель
nod;
setlocale(LC_ALL, rus); // Возможность вывода русских символов в кодировке
// Windows-1251 на консоль
if (argc3) // Ошибка
{
printf_s(Ошибка, параметров в командной строке не хватает для задания исходных данных. Для завершения нажмите любую клавишу\n);
system(pause);
return 1;
}
// Читаем значения из командной строки
if (sscanf_s(argv[1], %d, a)1) // Читаем a
{
printf_s(Ошибка, неверный формат первого входного параметра. Для завершения нажмите любую клавишу\n);
system(pause);
return 1;
}
if (sscanf_s(argv[2], %d, b)1) // Читаем a
{
printf_s(Ошибка, неверный формат первого входного параметра. Для завершения нажмите любую клавишу\n);
system(pause);
return 1;
}
nod = Evklid(a, b); // Получаем наибольший общий делитель
printf(a=%d, b=%d, nod=%d. Сокращенная дробь: %d/%d. Для завершения нажмите любую клавишу\n, a, b, nod, a/nod, b/nod);
system(pause); // Остановка программы до нажатия любой клавиши
return 0;
}
После компиляции и сборки программы ее необходимо запустить в командной строке. Если имя исполняемого файла MyProg.exe, то его необходимо в командной строке ввести команду MyProg 66 100
После имени исполняемого файла обязательно идут через пробелы 2 параметра, являющиеся целыми значениями – числителем и знаменателем дроби.
Результаты работы программы представлены на рисунке 6.
Рисунок 6 – Результаты работы программы
Статьи к прочтению:
argc argv c++ что это. Параметры функции main argc argv. Аргументы main. C ++ Урок #70
Похожие статьи:
-
Функции с начальными значениями параметров (по-умолчанию)
В определении функции может содержаться начальное (умалчиваемое) значение параметра. Это значение используется, если при вызове функции соответствующий…
-
Передача параметров по значению и по ссылке
Программирование методов с использованием строк Цель лабораторной работы: изучить методы в языке C#, правила работы с символьными данными и с компонентом…