Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Yetty
3136 / 2168 / 1408
Регистрация: 18.12.2017
Сообщений: 6,886
1

Почему не работает цикл while в цикле for

25.12.2017, 05:38. Просмотров 407. Ответов 7
Метки нет (Все метки)

подскажите, почему не срабатывает вывод если while находится в for ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    int n;
    for (n=9999; n<10001; n++)
    {   
    while ((n/=10) > 0) cout <<"n="<<n; 
    }
    system ("pause");
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2017, 05:38
Ответы с готовыми решениями:

Выяснить почему после ввода первого элемента массива цикл не работает (std::cin в цикле for)
Добрый день! Взялся за простой пример из книги Лафоре. #include &lt;iostream&gt; #include...

Почему не работает цикл for
У меня не работает первый цикл for, хотя вроде ошибки нигде найти не могу. То есть программа...

Цикл: как работает цикл в цикле
Не могу понять как работает цикл в цикле например: repeat begin lalalala if что-то1&lt;&gt;100 then...

Не работает цикл в цикле
Добрый день! Написала код для копирования данных с другого листа при соблюдении условия, но при...

вывод в цикле, почему не работает
Доброго всем. Банально хочу вывести через dbms_output в цикле while n-ое кол-во строк. Вопрос...

7
Kuzia domovenok
2918 / 2483 / 643
Регистрация: 25.03.2012
Сообщений: 8,852
Записей в блоге: 1
Завершенные тесты: 1
25.12.2017, 07:19 2
Почему не работает цикл while в цикле for
0
zss
Модератор
Эксперт С++
8954 / 7784 / 4808
Регистрация: 18.12.2011
Сообщений: 20,729
Завершенные тесты: 1
25.12.2017, 07:27 3
Вы, наверное, имели ввиду такое
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
//#include <cmath>
using namespace std;
 
int main()
{
    int n;
    for (n=9999; n<10001; n++)
    {   
         cout <<"n=";
         int k=n;// чтобы не портить n
         do
             cout <<k%10; // выводим десятичные цифры в обратном порядке
         while ((k/=10) > 0);
         cout<<endl; 
    }
    system ("pause");
    return 0;
}
0
Yetty
3136 / 2168 / 1408
Регистрация: 18.12.2017
Сообщений: 6,886
25.12.2017, 17:25  [ТС] 4
Kuzia domovenok, но в Вашем скрине 1 цикл for, почему второй (для числа 10000) не срабатывает?
Цитата Сообщение от zss Посмотреть сообщение
Вы, наверное, имели ввиду такое
zss, нет я имел ввиду именно то, что спрашивал (это просто как пример для внешнего и внутреннего циклов без привязки к конкретной задаче). У Вас тоже 1 цикл for срабатывает для моего примера?
0
25.12.2017, 17:25
zss
Модератор
Эксперт С++
8954 / 7784 / 4808
Регистрация: 18.12.2011
Сообщений: 20,729
Завершенные тесты: 1
25.12.2017, 17:41 5
Цитата Сообщение от Yetty Посмотреть сообщение
почему второй (для числа 10000) не срабатывает?
Вы испортили n во внутреннем цикле. При выходе из него n равно нулю,
далее n++ делает его равным 1, заходим во внутренний цикл, получаем сразу ноль,
выходим, n++ и т.д циклимся бесконечно.

Решение проблемы см. в 11 строке моего кода
0
Lambont
92 / 91 / 61
Регистрация: 23.11.2013
Сообщений: 242
25.12.2017, 17:59 6
Цитата Сообщение от Yetty Посмотреть сообщение
почему второй (для числа 10000) не срабатывает
Потому что переменная n инкреметируется на единицу в цикле for, только когда заканчивает работу цикл while, а заканчивает работу он тогда, когда выражение в условии n/=10 становится равным нулю, а поскольку это выражение также присваивает результат переменной n, то до следующей итерации цикла for n доходит равным нулю, инкрементируется на 1 и становится равным 1, и при следующем входе в while получается что n = 1 / 10, что равно опять нулю. И так в бесконечный цикл

Добавлено через 16 минут
То есть движение после захода в цикл for такое:

В начале цикла for n присваивается 9999, это меньше чем 10001, значит продолжаем:
Входим в цикл while:
n = 9999/10 = 999 > 0 ==> cout <<"n="<<n;
n = 999 / 10 = 99 > 0 ==> cout <<"n="<<n;
n = 99 / 10 = 9 > 0 ==> cout <<"n="<<n;
n = 9 / 10 = 0 == 0 ==> завершить цикл while
Новая итерация цикла for:
n++ -> n = n + 1 = 0 + 1 = 1 < 10001
Входим в цикл while:
n = 1 / 10 = 0 == 0 ==> завершить цикл while
Новая итерация цикла for:
n++ -> n = n + 1 = 0 + 1 = 1 < 10001
Входим в цикл while:
n = 1 / 10 = 0 == 0 ==> завершить цикл while
Новая итерация цикла for:
n++ -> n = n + 1 = 0 + 1 = 1 < 10001
Входим в цикл while:
n = 1 / 10 = 0 == 0 ==> завершить цикл while

И так до бесконечности...
0
Kuzia domovenok
2918 / 2483 / 643
Регистрация: 25.03.2012
Сообщений: 8,852
Записей в блоге: 1
Завершенные тесты: 1
25.12.2017, 19:54 7
Цитата Сообщение от Yetty Посмотреть сообщение
Kuzia domovenok, но в Вашем скрине 1 цикл for, почему второй (для числа 10000) не срабатывает?
ты н напсл, что он вообщк по задумк е должн делаать?
0
Yetty
3136 / 2168 / 1408
Регистрация: 18.12.2017
Сообщений: 6,886
26.12.2017, 00:07  [ТС] 8
Цитата Сообщение от zss Посмотреть сообщение
...далее n++ делает его равным 1
zss, даже не думал что так - считал что что n++ только шаг счётчику определяет
Цитата Сообщение от zss Посмотреть сообщение
Решение проблемы см. в 11 строке моего кода
Да вижу, спасибо.

Lambont, благодарю Вас за подробное описание вышеупомянутой ситуации

Тему можно закрывать.
0
26.12.2017, 00:07
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2017, 00:07

Второе условие в цикле почему-то не работает
Этот код работает как нужно мне: $surname = 'Вася'; do { $rows = mysql_query(&quot;SELECT * FROM...

Почему mysqli_fetch_array работает только в цикле?
Здравствуйте! Подскажите пожалуйста почему когда вывожу в таком формате все работает: while (null...

Почему не работает таймер в практически бесконечном цикле?
Вобщем код такой. procedure TForm1.Timer1Stop(Sender: TObject); begin //procedure ...


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

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

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