C ++ для многократного несоответствия условий цикла - PullRequest
0 голосов
/ 28 января 2019

Код, о котором идет речь:

#include<iostream>

using namespace std;

int main() {
    int a[10] = {0, 1, 0, 1, 0, 1, 1, 0, 0, 1};

    for (int i = 0; i < 10; ++i) if (a[i] == 1) cout<<i<<" ";

    cout<<endl;

    for (int i = 0; i < 10 && a[i] == 1; ++i) cout<<i<<" ";

    cout<<endl;

}

Вывод:

1 3 5 6 9
// and an empty line

Если мое понимание оценки состояния верно, то оба выхода должны быть одинаковыми.Поскольку условие a[i] == 1 проверяется каждый раз, i увеличивается.Итак, почему это происходит?

Я проверил это с помощью g ++ и онлайнового ide, называемого ideone ссылка на код .

Я считаю, что мне не хватает чего-то очень простогоздесь, и это очень тупой вопрос, поэтому, пожалуйста, прости меня за то, что я спросил об этом заранее.

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Условие в цикле for оценивается перед на каждой итерации , и если оно выдает false, цикл завершается.

В первом случае условие имеет значение i < 10 и это становится false только после того, как i достигнет 10, поэтому условие в if оценивается 10 раз, и вы получите выходной сигнал 1 3 5 6 9.

Во втором случае условие равно i < 10 && a[i] == 1, которое становится false на самой первой итерации, когда i равно 0, а a[0] равно 0. Затем цикл for завершается, и условиев операторе if никогда не оценивается, и поэтому вы не получите никакого вывода.

0 голосов
/ 28 января 2019

Нет.Результаты не совпадают.В первом цикле для прокручивается от 0 до 9, и каждый раз внутренний , если проверяет, равен ли соответствующий индекс a 1 или нет,Таким образом, производительность первого ясно.Второй действует совсем по-другому.Вторая для сохраняется до тех пор, пока выполняется условие (хотя оно даже не выполняется в начале, так как a [0] = 0 ).

A лучшеНапример:

int x[]={1, 1, 1, 0, 0, 0, 0, 0, 1, 1};

первый цикл выводит 0 1 2 8 9, а выход второго - 0 1 2.

0 голосов
/ 28 января 2019

Завершение цикла условия в i = 0, потому что a [0] = 0.Ваше условие для продолжения - [i] = 1.поэтому он заканчивается в первом случае

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...