Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 1
Регистрация: 23.03.2016
Сообщений: 76

Переполнение стека в цикле, присваивание string string

24.10.2017, 22:40. Показов 2528. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код:
C#
1
2
3
4
5
6
7
8
for (int i =0; i<maskedTextBox1.Text.Length; i++)
            {
                if (Char.IsWhiteSpace( maskedTextBox1.Text[i] ) && !i.Equals(' '))
                {
                    maskedTextBox1.Text = maskedTextBox1.Text.Replace( maskedTextBox1.Text[i], ' ');
                }
                
            }
Здесь получается бесконечный цикл, причем при заходе в if переменная i обнуляется. Отладчик выходит на условие for... И i становится 0, причем i обнуляется в момент попадания отладчика НА for, а не при проходе этого условия. Как это работает? Я так понимаю, это из-за переприсваивания String. Но почему так?
Миниатюры
Переполнение стека в цикле, присваивание string string  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.10.2017, 22:40
Ответы с готовыми решениями:

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population. Создание объектов может происходить как без...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Здравствуйте! По C# есть задачка, с которой я так и не разобрался :( Задача: Создайте класс Animal. Добавьте поля string...

Как использовать String.Substring(string, string)?
Есть у String метод Substring(int, int), но он принимает только числа. Я видел на видео, что можно парсить по словам. Например: string...

10
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,573
24.10.2017, 22:44
Вы хоть сами то поняли что написали?
C#
1
!i.Equals(' ')
вот это например по вашему что должно делать?

И вообще я надеюсь этот код не в обработчике TextChanged находится?
0
0 / 0 / 1
Регистрация: 23.03.2016
Сообщений: 76
25.10.2017, 01:34  [ТС]
Да, if бредовый. Можно написать такой код:
C#
1
2
3
4
5
6
7
8
for (int i =0; i<maskedTextBox1.Text.Length; i++)
            {
                if (Char.IsWhiteSpace( maskedTextBox1.Text[i] ) && !maskedTextBox1.Text[i].Equals(' '))
                {
                    maskedTextBox1.Text = maskedTextBox1.Text.Replace( maskedTextBox1.Text[i], ' ');
                }
                
            }
Но вопрос от этого не отпадает. Почему i зануляется после выхода из if?

Добавлено через 58 секунд
Нет, не в нём. Даже если и в нём, многопоточности тут нет, как это касается вопроса?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,573
25.10.2017, 01:44
Цитата Сообщение от старвит Посмотреть сообщение
Отладчик выходит на условие for...
Это цикл, а не условие.

Цитата Сообщение от старвит Посмотреть сообщение
И i становится 0, причем i обнуляется в момент попадания отладчика НА for
А чему оно по вашему должно быть равно в начале цикла? Вы же сами указали 0...
Установите точку останова на 32 строку, ибо ставить её на 30 строке смыла нет вообще никакого.

Цитата Сообщение от старвит Посмотреть сообщение
Да, if бредовый. Можно написать такой код:
А можно и такой
C#
1
if (Char.IsWhiteSpace( maskedTextBox1.Text[i] ) && maskedTextBox1.Text[i] != ' ')
Цитата Сообщение от старвит Посмотреть сообщение
Нет, не в нём. Даже если и в нём, многопоточности тут нет, как это касается вопроса?
Причем тут многопоточность? А касается вопроса самым прямым образом. Покажите полный код метода где этот код используется. А так же в какой строке возникает переполнение стека.
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
25.10.2017, 01:45
по коду, нелепая мышиная возня, что требуется то?
0
0 / 0 / 1
Регистрация: 23.03.2016
Сообщений: 76
25.10.2017, 07:36  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Сообщение от старвит
Отладчик выходит на условие for...
Это цикл, а не условие
в for есть условие выхода из цикла.
Цитата Сообщение от Someone007 Посмотреть сообщение
А чему оно по вашему должно быть равно в начале цикла? Вы же сами указали 0...
Перефразирую:
При следующей итерации цикла i становится = 0. Происходит это сразу после входа в условие if, а именно после прохода строки 34.
Полный код метода здесь лишний,т.к. этот бесконечный цикл не дает двигаться дальше.
C#
1
2
3
4
5
6
7
8
9
10
11
private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
 
            for (int i =0; i<maskedTextBox1.Text.Length; i++)
            {
                if (Char.IsWhiteSpace( maskedTextBox1.Text[i] ) && !maskedTextBox1.Text[i].Equals(' '))
                {
                    maskedTextBox1.Text = maskedTextBox1.Text.Replace( maskedTextBox1.Text[i], ' ');
                }
                
            }
Да, и переполнение стека происходит в строке Application.Run(...);
Миниатюры
Переполнение стека в цикле, присваивание string string  
0
0 / 0 / 1
Регистрация: 23.03.2016
Сообщений: 76
25.10.2017, 07:40  [ТС]
Требуется объяснить, почему происходит бесконечный цикл, а именно, почему после прохода строки
C#
1
maskedTextBox1.Text = maskedTextBox1.Text.Replace( maskedTextBox1.Text[i], ' ');
переменная i обнуляется.
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
25.10.2017, 07:56
Лучший ответ Сообщение было отмечено старвит как решение

Решение

Какая маска у контрола?

Добавлено через 3 минуты
Она не обнуляется, скорее всего в этой строке происходит новый вызов обработчика события MaskInputRejected.
А в новом вызове заново начинается цикл. Поэтому у вас бесконечное количество вложенных циклов.
1
Эксперт .NET
 Аватар для Usaga
14103 / 9320 / 1349
Регистрация: 21.01.2016
Сообщений: 35,000
25.10.2017, 13:53
Цитата Сообщение от старвит Посмотреть сообщение
Требуется объяснить, почему происходит бесконечный цикл
Если вы уже сами понимаете, с чем столкнулись, то зачем тут вопросы? Возьмите в руки отладчик, да пройдитесь немного по "зацикленному" коду и сами увидите, где он входит в бесконечный цикл и почему.
0
0 / 0 / 1
Регистрация: 23.03.2016
Сообщений: 76
25.10.2017, 16:58  [ТС]
Так, вот это уже интересно, сейчас проверю

Добавлено через 7 минут
Цитата Сообщение от Toros1992 Посмотреть сообщение
Какая маска у контрола?
Маска у контрола вот такая: [00, 00, 00]
Без квадратных скобок, конечно

Добавлено через 5 минут
Что ж, вы правы, действительно, снова входит в обработчик события. Отвергает ввод... Надо же, я думал, что события компонентов могут генерироваться только при вводе данных пользователем...

Добавлено через 17 минут
Да уж, в следующий раз поставлю точку останова на самой ф-ии, спасибо вам.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,573
25.10.2017, 18:24
Ну вот, я так и думал что проблема в срабатывании события, только событие оказалось не TextChanged а MaskInputRejected, что не меняет сути...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.10.2017, 18:24
Помогаю со студенческими работами здесь

Управление string переменными в цикле
string str1 = Console.ReadLine(); string str2 = Console.ReadLine(); string str3 = Console.ReadLine(); ...

Добавить новую строку в цикле в массив string[]
Добрый вечер. Есть примерно такая конструкция: string name = &quot;Имя&quot;; string strArr; for(int i = 0; i &lt;=5; i++) { ...

List<string, string, string> есть ли в C# что-то подобное?
Мне надо добавить в List не только имя файла, но и некоторые строки из этого файла. Т.е. например, у меня есть в определенном директории...

Работа со словарём в цикле Dictionary<int, List<string>>
Hi! Есть словарик. private static Dictionary&lt;int, List&lt;string&gt;&gt; test = new Dictionary&lt;int, List&lt;string&gt;&gt;(); заполнил, в...

Как определить конец string, для использования в цикле?
Всем привет! Есть некий код: dataGridView1.ColumnCount = 6; dataGridView1.RowCount = 1; int i =...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru