Компания ALT Linux
Опубликован: 07.03.2015 | Доступ: свободный | Студентов: 2135 / 487 | Длительность: 24:14:00
Лекция 4:

Использование функций при программировании на C++

4.9 Функция main(). Параметры командной строки

Итак, любая программа на C++ состоит из одной или нескольких функций, причём одна из них должна обязательно носить имя main (основной, главный ). Именно этой функции передаётся управление после запуска программы. Как любая функция, main может принимать параметры и возвращать значения. У функции main две формы записи:

  • без параметров:
    тип main ( ) {тело функции },
    				
  • и с двумя параметрами:
    тип main ( int argc, char *argv [ ] ) {тело функции }
    				
    .

Первый параметр argc определяет количество параметров, передаваемых в функцию main из командной строки. Второй параметр argv — указатель на массив указателей типа char (массив строк). Каждый элемент массива ссылается на отдельный параметр командной строки. При стандартном запуске программы argc равно 1, argv — массив из одного элемента, этим элементом является имя запускаемого файла.

Рассмотрим следующую программу.

#include <iostream>
#include <stdlib.h>
using namespace std;
int main ( int argc, char * argv [ ] )
{
	int i;
	cout<<"В командной строке "<<argc<<" аргументов\n";
	for ( i =0; i <argc; i ++)
	cout<<"Аргумент № "<<i <<" "<<argv [ i ]<<endl;
	return 0;
}
				

Текст программы хранится в файле 1.cpp. При стандартном запуске программа выведет следующую информацию:

В командной строке 1 аргументов
Аргумент № 0 ./1
				

Программа выводит количество параметров командной строки и последовательно все параметры. При стандартном запуске – количество аргументов командной строки — 1, этим параметром является имя запускаемого файла (в нашем случае, имя запускаемого файла — ./1).

Запустим программу следующим образом:

./1 abc 34 6 + 90 Вася Маша
				

Результаты работы программы представлены ниже.

В командной строке 8 аргументов
Аргумент № 0 ./1
Аргумент № 1 abc
Аргумент № 2 34
Аргумент № 3 6
Аргумент № 4 +
Аргумент № 5 90
Аргумент № 6 Вася
Аргумент № 7 Маша
				

Рассмотрим приложение, в которое в качестве параметров командной строки передаётся число1, операция, число2. Функция выводит

число1 операция число2.
				

Текст программы приведён на ниже6Функция atof преобразовывает строку символов в вещественное число, а если преобразование невозможно, то результатом функции atof будет число 0.0. Функция strcmp сравнивает две строки и возвращает 0 в случае совпадения строк. Подробнее об этих функциях можно прочесть в главе, посвящённой строкам.

#include <iostream>
#include <stdlib.h>
#include <cstring>
using namespace std;
int main ( int argc, char **argv )
{
	//Если количество параметров больше или равно 4, то были введены два числа и знак операции.
	if ( argc >=4)
	//Если операция *, то выводим число1*число2.
	{
		if ( ! strcmp ( argv [ 2 ], "*" ) ) cout<<atof ( argv [ 1 ] ) * atof ( argv [ 3 ] )<<endl;
		else
		//Если операция +, то выводим число1+число2.
		if ( ! strcmp ( argv [ 2 ], "+" ) ) cout<<atof ( argv [ 1 ] )+atof ( argv [ 3 ] )<<endl;
		else
		//Если операция -, то выводим число1-число2.
		if ( ! strcmp ( argv [ 2 ], " -" ) ) cout<<atof ( argv [ 1 ] ) -atof ( argv [ 3 ] )<<endl;
		else
		//Если операция /, то выводим число1/число2.
		if ( ! strcmp ( argv [ 2 ], "/" ) ) cout<<atof ( argv [ 1 ] ) / atof ( argv [ 3 ] )<<endl;
		else cout<<"неправильный знак операции"<<endl;
	}
	else
	cout<<"недостаточное количество операндов"<<endl;
	return 0;
}
				

Ниже приведены варианты запуска программы и результаты её работы7Текст программы хранится в файле 4.cpp. Имя исполняемого файла ./4 (ОС Lnux). Предлагаем читателю самостоятельно разобраться с результатами всех тестовых запусков приложения.

./4 1.3 + 7.8
9.1
./4 1.3 - 7.8
-6.5
./4 1.3 / 7.8
0.166667
./4 1.3 \* 7.8
10.14
./4 1.3 % 7.8
неправильный знак операции
./4 1.3+ 7.8
недостаточное количество операндов
				
Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?