Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

7.3.1. Передача програмі числових аргументів командного рядка

Як ми вже зазначали вище, під час передачі програмі числових даних як аргументів командного рядка, ці дані приймаються в рядковій формі. У програмі повинно бути передбачено їх перетворення у відповідний внутрішній формат за допомогою однієї із стандартних бібліотечних функцій, що підтримуються мовою C++. Наприклад, у процесі виконання наведеної нижче програми виводиться сума двох чисел, які вказуються в командному рядку після імені програми. Для перетворення аргументів командного рядка у внутрішнє представлення тут використовується стандартна бібліотечна функція atof(). Вона перетворить число з рядкового формату в значення типу double.

Код програми 7.14. Демонстрація знаходження суми двох числових аргументів командного рядка

#include <iostream> // Для потокового введення-виведення

#include <cstdlib> // Для використання бібліотечних функцій

using namespace std; // Використання стандартного простору імен

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

{

double а, b;

if(argc !=3) {

cout << "Використання: add число число \n|";

return 1;

}

a = atof(argv[1]);

b = atof(argv[2]);

cout << а + b;

getch(); return 0;

}

Щоб додати два числа, використовується командний рядок такого вигляду (припускаючи, що ця програма має ім'я add).

C>add 100.2 231

7.3.2. Перетворення числових рядків у числа

Стандартна бібліотека C++ містить декілька функцій, які дають змогу перетворити рядкове представлення числа в його внутрішній формат. Для цього використовуються такі функції, як atoi(), atol() і atof(). Вони перетворять рядок в цілочисельне значення (типу int), довге ціле (типу long) і значення з плинною крапкою (типу double) відповідно. Використання цих функцій (для їх виклику необхідно приєднати до програми заголовний файл <cstdlib>) продемонстровано у наведеному нижче коді програми.

Код програми 7.15. Демонстрація механізму використання функцій atoi(), atol() і atof()

#include <iostream> // Для потокового введення-виведення

#include <cstdlib> // Для використання бібліотечних функцій

using namespace std; // Використання стандартного простору імен

int main()

{

int izm;

long jzm;

double kzm;

izm = atoi("100");

jzm = atol("100000");

kzm = atof("-0.123");

cout << izm << " " << jzm << " " << kzm;

cout << "\n";

getch(); return 0;

}

Результати виконання цієї програми є такими:

100 100000 -0.123

Функції перетворення рядків корисні не тільки під час передачі числових даних програмі через аргументи командного рядка, але і у деяких інших ситуаціях.

7.4. Використання у функціях настанови return

Дотепер (починаючи з розд. 2) ми використовували настанову return без докладних пояснень. Нагадаємо, що настанова return виконує дві важливі операції. По-перше, вона забезпечує негайне повернення керування до ініціатора виклику функції. По-друге, її можна використовувати для передачі значення, що повертається функцією. Саме цим двом операціям і присвячено даний розділ.

7.4.1. Завершення роботи функції

Як зазначалося вище, керування від функції передається ініціатору її виклику в двох ситуаціях: або внаслідок виявлення фігурної дужки, що закривається, або у процесі виконання настанови return. Настанову return можна використовувати з певним заданим значенням або без нього. Але, якщо в оголошенні функції вказано тип значення (тобто не тип void), що повертається, то функція повинна повертати значення цього типу. Тільки void-функції можуть використовувати настанову return без будь-якого значення.

Для void-функцій настанова return в основному використовується як елемент програмного керування. Наприклад, у наведеній нижче функції виводиться результат зведення числа в позитивний цілочисельний степінь. Якщо ж показник степеня виявиться негативним, настанова return забезпечить вихід з функції, перш ніж буде зроблена спроба обчислити такий вираз. У цьому випадку настанова return діє як керівний елемент, тобто запобігає небажаному виконанню певної частини функції.

void power(int base, int exp)

{

int izm;

if(exp<0) return; /* Щоб не допустити зведення числа в негативний

степінь, тут виконується повернення у функцію, яка

викликає, і ігнорується решта частини функції. */

izm = 1;

for(; exp; exp--) izm = base * izm;

cout << "Результат дорівнює: " << izm;

}

Функція може містити декілька настанов return. Функція буде завершена у процесі виконання хоч би одного з них. Наприклад, такий фрагмент коду програми є абсолютно правомірним.

void fun()

{

//...

switch(с) {

case 'a': return;

case 'b': //...

case 'c': return;

}

if(count<100) return; //...

}

Проте необхідно мати на увазі, що дуже велика кількість настанов return може погіршити ясність алгоритму і ввести в оману тих, хто буде у ньому розбиратися. Декілька настанов return варто використовувати тільки у тому випадку, якщо вони сприяють ясності функції.