Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpPmFnER 279 of 390 menu
◀ ▶

Досрочный выход из функции в C++

После того, как выполнится инструкция return, функция закончит свою работу. То есть после выполнения return больше никакой код не выполнится.

Смотрите пример:

#include <iostream> int func(int num) { return num * num; std::cout << "!\n"; // этот код никогда не выполнится } int main() { int res = func(3); std::cout << res << "\n"; // выведет 9 return 0; }

Это не значит, что в функции должен быть один return. Но выполнится только один из них.

В следующем примере в зависимости от значения параметра выполнится либо первый, либо второй return:

#include <iostream> #include <string> std::string func(int num) { if (num >= 0) { return "+"; } else { return "-"; } } int main() { std::cout << func(3) << "\n"; // выведет '+' std::cout << func(-3) << "\n"; // выведет '-' return 0; }

Пусть у нас есть функция, возвращающая сумму чисел от 1 до 5:

#include <iostream> int func() { int sum = 0; for (int i = 1; i <= 5; i++) { sum += i; } return sum; } int main() { int res = func(); std::cout << res << "\n"; // выведет 15 return 0; }

Пусть теперь мы расположим return внутри цикла, вот так:

#include <iostream> int func() { int sum = 0; for (int i = 1; i <= 5; i++) { sum += i; return sum; } return sum; // сюда выполнение не дойдет } int main() { int res = func(); std::cout << res << "\n"; // выведет 1 return 0; }

В этом случае цикл прокрутится лишь одну итерацию и произойдет автоматический выход из функции (ну и заодно из цикла). А за одну итерацию цикла в переменной sum окажется лишь число 1, а не вся нужная сумма.

То, что return расположен внутри цикла, не всегда может быть ошибкой.

В следующем примере сделана функция, которая определяет, сколько первых чисел, начиная с 1, нужно сложить, чтобы сумма стала больше или равна 10:

#include <iostream> int func() { int sum = 0; for (int i = 1; i <= 5; i++) { sum += i; // Если сумма больше или равна 10: if (sum >= 10) { return i; // выходим из цикла и из функции } } return 0; // если порог не достигнут } int main() { int res = func(); std::cout << res << "\n"; // выведет 4 return 0; }

А в следующем примере сделана функция, которая вычисляет, сколько целых чисел, начиная с 1, нужно сложить, чтобы результат был больше 100:

#include <iostream> int func() { int sum = 0; int i = 1; while (true) { // бесконечный цикл sum += i; if (sum >= 100) { return i; // цикл крутится пока не выйдет тут } i++; } } int main() { std::cout << func() << "\n"; // выведет 14 return 0; }

Что выведется в консоль в результате выполнения следующего кода:

#include <iostream> int func(int num1) { return num1; int num2 = num1 * num1; return num2; } int main() { std::cout << func(3) << "\n"; return 0; }

Объясните почему.

Что выведет каждый из std::cout в результате выполнения следующего кода:

#include <iostream> #include <cstdlib> int func(int num) { if (num <= 0) { return std::abs(num); } else { return num * num; } } int main() { std::cout << func(10) << "\n"; std::cout << func(-5) << "\n"; return 0; }

Объясните почему.

Что выведет каждый из std::cout в результате выполнения следующего кода:

#include <iostream> #include <cstdlib> int func(int num) { if (num <= 0) { return std::abs(num); } return num * num; } int main() { std::cout << func(10) << "\n"; std::cout << func(-5) << "\n"; return 0; }

Объясните почему.

Что выведется в консоль в результате выполнения следующего кода:

#include <iostream> int func(int num1) { int num2 = 0; for (int i = 1; i <= num1; i++) { num2 += i; return num2; } return num2; } int main() { std::cout << func(5) << "\n"; return 0; }

Объясните почему.

Что хотел сделать автор данного кода? Исправьте ошибку автора.

Напишите функцию, которая параметром будет принимать число и делить его на 2 столько раз, пока результат не станет меньше 10. Пусть функция возвращает количество итераций, которое потребовалось для достижения результата.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить