Только для цикла с условием - PullRequest
0 голосов
/ 26 мая 2018

Может кто-нибудь объяснить, как работает цикл for (; A--;).У него нет никаких приращений, так не должно ли оно работать вечно?

int main(){
int A, B;

cout << "Anna t\x84htien m\x84\x84r\x84: "; //Give ammount of stars: 
cin >>A;
cout << endl;

for(; A--;){
    for(B = 0; A >= B; B++){
        cout << "* ";
    }
    cout << endl;
}

return 0;
}

Ответы [ 4 ]

0 голосов
/ 26 мая 2018

В C / C ++ условие истинно во всех смыслах, если оно ненулевое.Позвольте мне пояснить это, приведя пример:

#include<iostream>
using namespace std;
int main()
{
    int a=5, b=-5;
    while(a)
    {
       cout<<"# ";
       a--;
    }

    cout<<"\n";

    while(b)
    {
       cout<<"* ";
       b++;
    }

return 0;
}

Вывод кода будет следующим:

# # # # # 
* * * * * 

Если вы посмотрите на это, внутри 'a' покацикл , условие является положительным и уменьшается до тех пор, пока значение не станет равным «0».Пока значение не равно 0, условие называется истинным, и поток управления выполняет операторы внутри цикла while.

В цикле 'b' while он четко виденчто даже если 'b' отрицательно, операторы внутри цикла while будут выполняться до тех пор, пока значение 'b' не увеличится до 0.

Видно, что каждый ненулевой член считается истинным условиеми 0 (ноль) считается ложным условием.Ошибочно полагать, что (только) 1 является истинным, а 0 - ложным.

Синтаксис для цикла for: for(declaration;condition;iteration).Если одно из утверждений отсутствует, цикл все равно будет продолжать выполняться.A for loop работает до тех пор, пока условие выполняется.Поток управления сначала приходит к объявлению, затем проверяет условие.Если условие истинно, то оно выполняет операторы в области видимости цикла.Наконец, управление приходит к итеративным операторам и снова проверяет условие.Во время выполнения, если в любой момент условие зацикливания оказывается равным false, тогда элемент управления завершает программу или выполняет операторы сразу после цикла.

0 голосов
/ 26 мая 2018

Цикл for работает до тех пор, пока выполняется его условие.A-- эквивалентно A-- != 0, так что это то, как долго он будет выполняться.

Возможно, приятно знать, что цикл for может содержать гораздо больше, чем просто инкрементные операции, Обычно , это что-то вроде ++i, но в этом нет необходимости.В школе вы, возможно, не узнаете, насколько на самом деле общие циклы for.

0 голосов
/ 26 мая 2018

A-- находится в условной части.Пока A! = 0, цикл будет выполняться.Поскольку оператор - находится после переменной, декремент будет выполнен после вычисления значения A.Пример:

int A = 10;
//This loop will output: 9 8 7 6 5 4 3 2 1 0
for(;A--;){
  std::cout<<A<<" ";
}
A = 10;
//This loop will output: 9 8 7 6 5 4 3 2 1
for(;--A;){
  std::cout<<A<<" ";
}
0 голосов
/ 26 мая 2018

Идет до тех пор, пока A не достигнет 0, а затем остановится в случае, если A изначально было >= 0, в противном случае, как указал Эрик, поведение не определено, поскольку произойдет переполнение, и оно может закончитьсянесколько разных способов.

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