Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
257 / 228 / 56
Регистрация: 03.02.2011
Сообщений: 1,937
Записей в блоге: 1
1
.NET 3.x

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

27.11.2012, 19:49. Показов 1772. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2012, 19:49
Ответы с готовыми решениями:

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

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

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

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

7
121 / 119 / 47
Регистрация: 14.09.2012
Сообщений: 276
27.11.2012, 20:37 2
условие выполняется правильно. у вас стоит пока childNode не равняется null условие выполняется иначе не выполняется
0
257 / 228 / 56
Регистрация: 03.02.2011
Сообщений: 1,937
Записей в блоге: 1
27.11.2012, 20:39  [ТС] 3
ablai96, так программа то вышла из цикла. И вернулась туда сразу же после последней строчки кода. Может так оно и надо но я не понимаю почему.
0
121 / 119 / 47
Регистрация: 14.09.2012
Сообщений: 276
27.11.2012, 20:42 4
вы лучше весь код покажите или как вызывается эта функция. потому что ошибка не в этом куске кода
0
257 / 228 / 56
Регистрация: 03.02.2011
Сообщений: 1,937
Записей в блоге: 1
27.11.2012, 20:47  [ТС] 5
Цитата Сообщение от ablai96 Посмотреть сообщение
потому что ошибка
тут нет ошибки, всё отрабатывает правильно. Но я, хоть убей, не понимаю, почему программа, вышедшая из цикла, заходит туда опять без полного прохода по всей функции, или вообще не выходит из функции.
0
121 / 119 / 47
Регистрация: 14.09.2012
Сообщений: 276
27.11.2012, 20:58 6
кажется правильно все выполняется у меня тоже так же выполнилось
0
257 / 228 / 56
Регистрация: 03.02.2011
Сообщений: 1,937
Записей в блоге: 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
121 / 119 / 47
Регистрация: 14.09.2012
Сообщений: 276
27.11.2012, 21:13 8
skilllab, если я правильно разобрался то он в начале заходит в цикл потом выполняет его и не заканчивая цикл вызывает traverse_node(rootNode), и выполняет его опять и когда условие не верно то он проходится по функции и затем возвращается туда откуда вызывался и выполняет его до конца и выходит. если это не правильно надеюсь меня исправят
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2012, 21:13

Почему не выполняется цикл?
Здравствуйте. Вот код: int main() { vector &lt;Book&gt; books; Book item = Book(); ...

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

Почему не выполняется цикл?
Есть цикл while (rd.Read()) он выполняется в том случае если я ввиду логин который уже есть в базе...

Почему скрипт входит в бесконечный цикл на Win XP ?
Приветствую. Собственно сабж @echo off SetLocal EnableExtensions EnableDelayedExpansion ...


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

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

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