Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
no swear
129 / 109 / 37
Регистрация: 01.07.2016
Сообщений: 634
Завершенные тесты: 1
#1

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

23.02.2017, 18:48. Просмотров 243. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2017, 18:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инструкция if(.) continue (C++):

If else statement (continue) - C++
Простите - не пойму как форматировать код, копируемый с (С++). Всё исправлено - досихпор какие - то ошибки у меня Выдаёт - The...

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

Оператор continue - C++
Прошу прощения за глупый вопрос. Пишу курсовую, голова уже совсем не работает. for (level=0;level&lt;CatalogueCount;level++) { if...

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

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

Оператор continue - C++
int main() { setlocale(LC_ALL, &quot;Russian&quot;); int r; cout &lt;&lt; &quot;Введите кол-во элементов массива = &quot;; cin &gt;&gt; r; int *a = new...

6
zss
Модератор
Эксперт С++
6687 / 6249 / 2084
Регистрация: 18.12.2011
Сообщений: 16,321
Завершенные тесты: 1
23.02.2017, 18:51 #2
f будет равно false только при первой итерации с n>=0
1
no swear
129 / 109 / 37
Регистрация: 01.07.2016
Сообщений: 634
Завершенные тесты: 1
23.02.2017, 18:56  [ТС] #3
Я удалил f = true после 13 строки, результат не изменился. Обновите страничку, увидите
0
_liv_
234 / 234 / 87
Регистрация: 07.10.2015
Сообщений: 643
Завершенные тесты: 1
23.02.2017, 19:03 #4
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
no swear
129 / 109 / 37
Регистрация: 01.07.2016
Сообщений: 634
Завершенные тесты: 1
23.02.2017, 19:12  [ТС] #5
Нет вы меня неправильно поняли. Вот есть условие "if(n<0 && !f) continue;" где f = false, по моему понятию 13 строка вообще не должна срабатывать при любых n которые я ввожу потому что f = false но она суммирует числа n. Но если я поменяю условие на "или" "if(n<0 || !f)" то тогда сумму чисел n уже не будет считать. Почему так?

Добавлено через 1 минуту
Кажется я разобрался. Вопрос отпадает, если честно сам запутался немного
0
nd2
2454 / 2043 / 718
Регистрация: 29.01.2016
Сообщений: 6,724
23.02.2017, 19:13 #6
Цитата Сообщение от 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
_liv_
234 / 234 / 87
Регистрация: 07.10.2015
Сообщений: 643
Завершенные тесты: 1
23.02.2017, 19:20 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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
23.02.2017, 19:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2017, 19:20
Привет! Вот еще темы с ответами:

Оператор continue. - C++
Помогите:Вывести нечетные числа от 0 до 100, используя оператор continue.

Почему не выполняется continue? - C++
Всем привет. Задача: Дано натуральное число n &gt; 9. Определить его вторую (с начала) цифру с использованием одной инструкции цикла. Вопрос...

Class book continue - C++
Задание: Создать заголовочный файл bookshop.h и описать в нём класс bookshop со следующими полями (закрытыми) и функциями-членами...

как задействовать оператор continue? - C++
Написал программу для демонстрации работы оператора continue. Компилятор ругается, пишет что оператор не в петле. Программу списал из...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru