Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
no swear
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 797
Завершенные тесты: 1
1

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

23.02.2017, 18:48. Просмотров 893. Ответов 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 else statement (continue)
Простите - не пойму как форматировать код, копируемый с (С++). Всё...

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

Оператор continue
Прошу прощения за глупый вопрос. Пишу курсовую, голова уже совсем не работает....

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

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

6
zss
Модератор
Эксперт С++
7178 / 6677 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
23.02.2017, 18:51 2
f будет равно false только при первой итерации с n>=0
1
no swear
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 797
Завершенные тесты: 1
23.02.2017, 18:56  [ТС] 3
Я удалил f = true после 13 строки, результат не изменился. Обновите страничку, увидите
0
liv
553 / 470 / 143
Регистрация: 07.10.2015
Сообщений: 1,557
Завершенные тесты: 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
166 / 144 / 76
Регистрация: 01.07.2016
Сообщений: 797
Завершенные тесты: 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
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,045
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
553 / 470 / 143
Регистрация: 07.10.2015
Сообщений: 1,557
Завершенные тесты: 1
23.02.2017, 19:20 7
Лучший ответ Сообщение было отмечено 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
23.02.2017, 19:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2017, 19:20

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

Оператор continue
int main() { setlocale(LC_ALL, &quot;Russian&quot;); int r; cout &lt;&lt; &quot;Введите...

Почему не выполняется continue?
Всем привет. Задача: Дано натуральное число n &gt; 9. Определить его вторую (с...


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

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

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