Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2

Вернуть из функции значение; при этом прервать саму функцию

04.08.2014, 21:04. Показов 1807. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую! Прощу прощения за глупый вопрос, но не знаю на него ответа. Требуется вернуть из функции значение при этом прервать саму функцию. Есть к примеру код (нигде не используется в проектах, написал для понимания вопроса):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool VarProb=Proba(7);
 
bool Proba(int var)
{
    for (int i=0; i<100; i++)
    {
        for (int j=0; j<100; j++)
        {
            for (int k=0; k<100; k++)
            {
                if ((i+j+k)==var) return true;
            }
        }
    }
}
Так вот вопрос: из функции true вернётся сразу же когда условие (i+j+k)==var (т.е. фактический должно получится 0+0+7 и больше никаких других случаев) станет истинным, или же сначала все for'ы дойдут до конца?
Заранее спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.08.2014, 21:04
Ответы с готовыми решениями:

Сравнить два массива на идентичность и при этом вернуть значение, которое не идентично
Всем доброго время суток! У меня задача сравнить два массива на идентичность и при этом вернуть значение, которое не идентично т.е....

Передать значение из функции в нее же саму при следующем вызове
нужно передать значение pustie в функцию и из нее при каждом взятии этой функции вот заголовки: LRESULT CALLBACK WndProc(HWND, UINT,...

Вернуть значение из функции summa в функцию main
//Я только начал учить функции, и столкнулся с такой проблемой - //пример из учебника не работает, это оч. печально! //Прошу вас,...

8
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
04.08.2014, 21:12
Лучший ответ Сообщение было отмечено X_Starter_X как решение

Решение

Сначала будет
i = 0, j = 0, k = 0, после он проверит 0+0+0 == var
далее
i = 0, j = 0, k = 1 итд.
И из функции (и из цикла соответственно) он выйдет как только k будет равно 7.

Добавлено через 37 секунд
собственно j++ произойдёт только когда k>100
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
04.08.2014, 21:16
Как только по логике кода дойдет до оператора return, все циклы, все try - catch, switch и прочее - все прерывается и функция возвращает то, что под ретерном.
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
05.08.2014, 08:54
Цитата Сообщение от X_Starter_X Посмотреть сообщение
или же сначала все for'ы дойдут до конца?
return это точка выхода из функции. Как только она попадается, все, что следует за ней далее в этой же функции, мгновенно отбрасывается.

Но всегда необходимо предусматривать и вариант, когда все ваши условия (вдруг) не выполнятся, то есть что возвращать по умолчанию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool Proba(int var)
{
    for (int i=0; i<100; i++)
    {
        for (int j=0; j<100; j++)
        {
            for (int k=0; k<100; k++)
            {
                if ((i+j+k)==var) return true;
            }
        }
    }
    return false; // Если все же до сюда дойдет, то мы это узнаем по возвращенному результату
}
1
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
05.08.2014, 11:07
Есть еще один нюанс.
если взять код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool Proba(int var)
{
try {
    for (int i=0; i<100; i++)
    {
        for (int j=0; j<100; j++)
        {
            for (int k=0; k<100; k++)
            {
                if ((i+j+k)==var) return true;
            }
        }
    }
} __finally {
//этот код выполняется при return
//что бывает удобно если точек выходе несколько
}
}
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
05.08.2014, 11:18
Цитата Сообщение от krv Посмотреть сообщение
еще один нюанс
Особенно если учесть, что __finally не стандартизирован и внутри него может располагаться что угодно, то нюанс еще тот. И вообще стоит два раза подумать, прежде чем пихать что-либо, начинающееся с двух нижних подчеркиваний, туда, где оно впринципе необязательно.
Но вцелом да, вцелом хорошо.
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
05.08.2014, 12:29
Цитата Сообщение от krv Посмотреть сообщение
Есть еще один нюанс.
Вроде, стоит помнить о том, что если внутри try возникнет ошибка __finally выполниться тоже. Ведь верно?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
05.08.2014, 12:38
DeadHipo, __finally вообще разрабатывался как защита от exception-ов.
0
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
05.08.2014, 12:49
Цитата Сообщение от DeadHipo Посмотреть сообщение
Вроде, стоит помнить о том, что если внутри try возникнет ошибка __finally выполниться тоже. Ведь верно?
Да, конечно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.08.2014, 12:49
Помогаю со студенческими работами здесь

Как из функции возвращающей табличное значение грамотно выдернуть значение и при этом сделать INSERT
В базе существует таблица с полями k0, k1, k2. Написана функция, возвращающая табличное значение типа k0, k1, k2, r0. Возвращает она всегда...

Как вернуть значение функции при нажатии кнопки?
Имеется функция в отдельном файле: import pickle as pk def load_file(): database = pk.load(open(p.way_to_base,...

Как при выходе из функции вернуть "старое" значение объекта
Byval работает только на простые типы - string?... У меня есть свой type или function. Мне необходимо при выходе из функции вернуть его...

Написать функцию, которая получает на вход имя другой функции и возвращает саму функцию, если она есть и null, если нет.
Написать функцию, которая получает на вход имя другой функции, а на выходе возвращает саму функцию, если она есть и null, если нет ...

Передать переменную из одной функции в другую, не вызывая саму функцию
И так есть 2 функции. В первую функцию func_1 передается перменная q она там как-то обрабатывается и теперь полученную переменную tmp надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru