Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
skilllab
225 / 201 / 50
Регистрация: 03.02.2011
Сообщений: 1,849
Записей в блоге: 1
Завершенные тесты: 1
1

Почему если условие входа в цикл не выполняется, функция заново входит в цикл

27.11.2012, 19:49. Просмотров 1353. Ответов 7
Метки нет (Все метки)

Сам код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
private void traverse_node(TreeControlItem node)
        {
            TreeControlItem childNode = default(TreeControlItem);
            Feature featureNode = default(Feature);
            int nodeObjectType = 0;
            object nodeObject = null;
            string restOfString = "";
            string indent = "";
            int i = 0;
            bool displayNodeInfo = true;
            nodeObjectType = node.ObjectType;
            nodeObject = node.Object;
            if ((nodeObject != null))
            {
                featureNode = (Feature)nodeObject;
                restOfString = "[FEATURE: " + featureNode.Name + "]";
            }
 
            if ((displayNodeInfo))
            {
                Debug.Print(indent + node.Text + " : " + restOfString);
            }
 
            // Expand the node
            node.Expanded = expandThis;
            traverseLevel = traverseLevel + 1;
            childNode = node.GetFirstChild();
 
            while ((childNode != null))
            {
                Debug.Print(indent + "Node is expanded: " + childNode.Expanded);
                traverse_node(childNode);
                childNode = childNode.GetNext();
            }
 
            traverseLevel = traverseLevel - 1;
 
        }
Когда
C#
1
childNode = null
код переходит к
C#
1
traverseLevel - 1
потом к кавычке и сразу перескакивает к
C#
1
traverse_node(childNode);
Почему?? Почему если условие входа в цикл не выполняется, функция не проходит заново а входит в цикл?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 19:49
Ответы с готовыми решениями:

Почему цикл не выполняется?
for (shet = 1; shet == 2; shet++) { string s = { "q", "w", "e", "r", "t", "y", "a", "s",...

Почему не выполняется вложенный цикл for?
Всем привет, подскажите почему у меня не заходит внутрь второго цикла For ? Смысл такой - у...

Почему данный цикл выполняется бесконечно!?
Начинаю учить С# , сейчас на изучении циклов и у меня возникли трудности. Хочу узнать почему данный...

Почему цикл выполняется три раза вместо одного
Программа выводит конструкцию циклов в языке C#. Задача сделать так , чтоб меню опроса выползало...

do while - почему выполняется цикл, даже если условие истина?
Подскажите пожалуйста, пишу программу вопрос/ответ. При не правильным вводе ответа, программа...

7
ablai96
120 / 118 / 47
Регистрация: 14.09.2012
Сообщений: 276
Завершенные тесты: 6
27.11.2012, 20:37 2
условие выполняется правильно. у вас стоит пока childNode не равняется null условие выполняется иначе не выполняется
0
skilllab
225 / 201 / 50
Регистрация: 03.02.2011
Сообщений: 1,849
Записей в блоге: 1
Завершенные тесты: 1
27.11.2012, 20:39  [ТС] 3
ablai96, так программа то вышла из цикла. И вернулась туда сразу же после последней строчки кода. Может так оно и надо но я не понимаю почему.
0
ablai96
120 / 118 / 47
Регистрация: 14.09.2012
Сообщений: 276
Завершенные тесты: 6
27.11.2012, 20:42 4
вы лучше весь код покажите или как вызывается эта функция. потому что ошибка не в этом куске кода
0
27.11.2012, 20:42
skilllab
225 / 201 / 50
Регистрация: 03.02.2011
Сообщений: 1,849
Записей в блоге: 1
Завершенные тесты: 1
27.11.2012, 20:47  [ТС] 5
Цитата Сообщение от ablai96 Посмотреть сообщение
потому что ошибка
тут нет ошибки, всё отрабатывает правильно. Но я, хоть убей, не понимаю, почему программа, вышедшая из цикла, заходит туда опять без полного прохода по всей функции, или вообще не выходит из функции.
0
ablai96
120 / 118 / 47
Регистрация: 14.09.2012
Сообщений: 276
Завершенные тесты: 6
27.11.2012, 20:58 6
кажется правильно все выполняется у меня тоже так же выполнилось
0
skilllab
225 / 201 / 50
Регистрация: 03.02.2011
Сообщений: 1,849
Записей в блоге: 1
Завершенные тесты: 1
27.11.2012, 21:03  [ТС] 7
Вызов:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private void button1_Click(object sender, EventArgs e)
        {
            int i = 0;
 
            ModelDoc2 myModel = default(ModelDoc2);
            FeatureManager featureMgr = default(FeatureManager);
            TreeControlItem rootNode = default(TreeControlItem);
 
            myModel = (ModelDoc2)SwApp.ActiveDoc;
            featureMgr = myModel.FeatureManager;
            rootNode = featureMgr.GetFeatureTreeRootItem2((int)swFeatMgrPane_e.swFeatMgrPaneBottom);
 
            expandThis = true;
 
            for (i = 0; i <= 1; i++)
            {
                if ((rootNode != null))
                {
                    Debug.Print("");
                    traverseLevel = 0;
                    traverse_node(rootNode);
                }
 
                expandThis = false;
 
                if (i == 0)
                {
                    MessageBox.Show("Ok to Collapse All");
                }
            }
        }
ablai96, да я понимаю что правильно, но почему так? ))) Где про такое написано?
0
ablai96
120 / 118 / 47
Регистрация: 14.09.2012
Сообщений: 276
Завершенные тесты: 6
27.11.2012, 21:13 8
skilllab, если я правильно разобрался то он в начале заходит в цикл потом выполняет его и не заканчивая цикл вызывает traverse_node(rootNode), и выполняет его опять и когда условие не верно то он проходится по функции и затем возвращается туда откуда вызывался и выполняет его до конца и выходит. если это не правильно надеюсь меня исправят
0
27.11.2012, 21:13
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 21:13

Цикл while, do-while. Выводить элементы заново, если булевое значение false
Есть класс Driver: public class Driver { { idGenerator++; } private...

Почему не входит в цикл?
#include &lt;iostream&gt; #include &lt;string&gt; int main(){ std::string s, t, path; short int...

Почему выполняется условие else, если выполнилось условие if?
При вводе буквы, которое есть в переменной word, по идеи, если такой буквы нету, то должно выдать...


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

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

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