Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943

Инструкция if(.) continue

23.02.2017, 18:48. Показов 1679. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните пожалуйста как работает эта инструкция на таком примере:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int num,sum = 0;
    int n;
    bool f = false;
    for(int i=1;i<=5;i++)
    {
        cin >> n;
        if(n<0 && !f)
            continue;
        sum+=n;
    }
    cout << sum;
    return 0;
}
Здесь вроде бы if(n<0 && !f) означает то что "если n<0 и f = false то следует пропустить данную итерацию", т е она не должна выполняться вообще поскольку f = false, но почему-то она выполняется. Если изменить условие на "или" if(n<0 || !f)
вот тогда sum+=n не будет работать, ПОЧЕМУ? Почему здесь всё наоборот?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.02.2017, 18:48
Ответы с готовыми решениями:

To be continue or not to be?
Уважаемые любители флейма, да не возбудит в вас мой вопрос к страсти флуду. вопрос. изучаю перл давно, ~ 3 года, и как тут один...

Не работает continue
Привет всем! написал такую ф-ю, которая должна шарить в папке (в которой текстовые файлы) и выводить в браузер их тексты function...

Оператор continue
void drawCircle(int x0, int y0, int radius) { int x = 0; int y = radius; int delta = 2 - 2 * radius; ...

6
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
23.02.2017, 18:51
f будет равно false только при первой итерации с n>=0
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
23.02.2017, 18:56  [ТС]
Я удалил f = true после 13 строки, результат не изменился. Обновите страничку, увидите
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
23.02.2017, 19:03
no swear, проверяется одновременно два условия n<0 и f=false.
Т.е. continue сработает только первый раз (т.к. потом f станет =true)
и только при условии, что введется отрицательное число.
Если введется неотрицательное, то continue пропустится.
Во всех последующих будет всегда идти суммирование (f=true)
Цитата Сообщение от no swear Посмотреть сообщение
Если изменить условие на "или" if(n<0 || !f)
В этом случае сработает "или",
т.е. любое n даст в первой итерации отработку continue (т.к. в первой итерации f=false)
Все последующие итерации будут зависеть от знака n !

Добавлено через 3 минуты
Убрав f=true, Вы тем самым делаете ненужным анализ && !f (всегда истина)
Если будет || !f, то всегда будет continue

Добавлено через 1 минуту
Что должно было быть?
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
23.02.2017, 19:12  [ТС]
Нет вы меня неправильно поняли. Вот есть условие "if(n<0 && !f) continue;" где f = false, по моему понятию 13 строка вообще не должна срабатывать при любых n которые я ввожу потому что f = false но она суммирует числа n. Но если я поменяю условие на "или" "if(n<0 || !f)" то тогда сумму чисел n уже не будет считать. Почему так?

Добавлено через 1 минуту
Кажется я разобрался. Вопрос отпадает, если честно сам запутался немного
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.02.2017, 19:13
Цитата Сообщение от no swear Посмотреть сообщение
Я удалил f = true после 13 строки, результат не изменился.
Какой результат?
Цитата Сообщение от no swear Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
    int num,sum = 0;
    int n;
    bool f = false;
    for(int i=1;i<=5;i++)
    {
        cin >> n;
        if(n<0 && !f)
            continue;
        sum+=n;
    }
Вторая часть условия всегда true, значит, будет ли выполняться дальше sum+=n или нет, зависит от первой части условия, т.е., n < 0 или n >= 0. Если n<0, то тогда continue.
1
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
23.02.2017, 19:20
Лучший ответ Сообщение было отмечено no swear как решение

Решение

Цитата Сообщение от no swear Посмотреть сообщение
13 строка вообще не должна срабатывать при любых n которые я ввожу потому что f = false но она суммирует числа n
Еще раз, continue сработает,когда будет ОДНОВРЕМЕННО два условия: n<0 и f=false.
Если хотя бы одно условие не выполнится, то выполнится суммирование. Т.е. вводим положительное число и имеем суммирование.

Добавлено через 4 минуты
Цитата Сообщение от no swear Посмотреть сообщение
Почему если я ввожу отрицательные числа то sum+=n срабатывает? f вроде бы у нас false
Цитата Сообщение от no swear Посмотреть сообщение
if(n<0 && f)
f то false, но continue сработает, только если f==true, а оно чему равно?

Добавлено через 1 минуту

Не по теме:

Явно

Цитата Сообщение от no swear Посмотреть сообщение
честно сам запутался немного
:)

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2017, 19:20
Помогаю со студенческими работами здесь

удаление continue
У Дейтлов есть задача: Что здесь имеется в виду под структурированным эквивалентом?

Оператор continue
Скажите пожалуйста! Почему, в данной программе у меня не работает оператор Continue.Программа должна умножать введённые числа игнорируя...

Оператор continue
Всем привет! Я читал оракловскую документацию по Java и наткнулся на пример использования уже упомянутого оператора. Суть вопроса: ...

Continue в цикле
Здравствуйте. Приборы ОВЕН МСД200 формируют на своей SD карте CSV файла следующего вида: Время;Канал 1;Канал 2;Канал 3;Канал 4 ...

оператор continue
Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1, 2, ... , 10 кг конфет. Нужно сделать через continue.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru