Есть такой блок (LV v.8.6). Программа получает строку и делит ее на ячейки массива по типу вводимых символов(буквы/цифры/точки и т.д.). Например, вводя qw123sd56.2, получим qw/123/sd/56/2 (точки отбрасываются).
Проблема в цикле, выделенном оранжевым, либо в цикле вокруг него. На его кнопку остановки приходит true, но он не останавливается. Для примера на входе я использовал строку asfaf (возможно зацикливание происходит потому, что строка состоит только из букв). Но факт остается фактом - при поступлении true цикл не останавливается
While loop не останавливается
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: While loop не останавливается
При подаче "asfaf", на выходе оранжевого цикла получается 5, а на другую сторону условия "=" приходит 5-1=4GT21 писал(а):Проблема в цикле, выделенном оранжевым, либо в цикле вокруг него. На его кнопку остановки приходит true, но он не останавливается. Для примера на входе я использовал строку asfaf (возможно зацикливание происходит потому, что строка состоит только из букв). Но факт остается фактом - при поступлении true цикл не останавливается
По этому внешний цикл и не останавливается.
Уберите "-1" и все заработает.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- beginner
- Сообщения: 49
- Зарегистрирован: 13 апр 2014, 18:53
- Версия LabVIEW: 14
- Контактная информация:
Re: While loop не останавливается
Цикл, выделенный оранжевым, останавливается каждый раз на 6-ой итерации (I=5) при подаче на вход строки asfaf. Другое дело, что после выхода из внутреннего цикла, условие остановки внешнего цикла равно False. И внутренний цикл запускается снова и снова.Проблема в цикле, выделенном оранжевым, либо в цикле вокруг него. На его кнопку остановки приходит true, но он не останавливается.
Так что внимательно проверьте условие остановки внешнего цикла. Раз цикл останавливается при обработке другой строки, то нужно доработать программу так, чтобы условие остановки работало в общем случае.
-
- user
- Сообщения: 74
- Зарегистрирован: 29 апр 2016, 09:22
- Версия LabVIEW: 8.6
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: While loop не останавливается
Действительно, заработало. Однако неясным остался вопрос, почему цикл не останавливался при true на кнопке остановкиIvanLis писал(а):При подаче "asfaf", на выходе оранжевого цикла получается 5, а на другую сторону условия "=" приходит 5-1=4GT21 писал(а):Проблема в цикле, выделенном оранжевым, либо в цикле вокруг него. На его кнопку остановки приходит true, но он не останавливается. Для примера на входе я использовал строку asfaf (возможно зацикливание происходит потому, что строка состоит только из букв). Но факт остается фактом - при поступлении true цикл не останавливается
По этому внешний цикл и не останавливается.
Уберите "-1" и все заработает.
LabVIEW 8.6
-
- user
- Сообщения: 74
- Зарегистрирован: 29 апр 2016, 09:22
- Версия LabVIEW: 8.6
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: While loop не останавливается
Понял, он тупо запускался заново. Я почему-то подумал, что он не останавливаетсяShurik_85 писал(а):Цикл, выделенный оранжевым, останавливается каждый раз на 6-ой итерации (I=5) при подаче на вход строки asfaf. Другое дело, что после выхода из внутреннего цикла, условие остановки внешнего цикла равно False. И внутренний цикл запускается снова и снова.Проблема в цикле, выделенном оранжевым, либо в цикле вокруг него. На его кнопку остановки приходит true, но он не останавливается.
Так что внимательно проверьте условие остановки внешнего цикла. Раз цикл останавливается при обработке другой строки, то нужно доработать программу так, чтобы условие остановки работало в общем случае.
UPD: и все-равно в коде где-то ошибка ))
LabVIEW 8.6
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: While loop не останавливается
Потому что цикл While - цикл с постусловием.GT21 писал(а):Действительно, заработало. Однако неясным остался вопрос, почему цикл не останавливался при true на кнопке остановки
.....
UPD: и все-равно в коде где-то ошибка ))
Можно исключить лишнюю итерацию, реализовав проверку на такт раньше, но вам проще сделать так: и не забивать голову, это нормальная практика.
Только проверьте, что бы последний символ обрабатывался.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: While loop не останавливается
На самом деле, можно сделать значительно проще.GT21 писал(а):UPD: и все-равно в коде где-то ошибка ))
Есть такая функция Lexical Class: http://zone.ni.com/reference/en-XX/help ... cal_class/
Получится примерно так: Нужно только фильтрануть ненужные, ну и не знаю, у Вас разница есть между регистрами? Сейчас разница есть, разбираются все семь классов...
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- user
- Сообщения: 74
- Зарегистрирован: 29 апр 2016, 09:22
- Версия LabVIEW: 8.6
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: While loop не останавливается
Да, разница есть. И ошибку нашел. Когда ввожу строку, то если символ не является точкой, буквой, цифрой или штрихом, то зацикливается. Сейчас вроде поправил, посмотрю ваш примерIvanLis писал(а):Нужно только фильтрануть ненужные, ну и не знаю, у Вас разница есть между регистрами? Сейчас разница есть, разбираются все семь классов...
LabVIEW 8.6
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 484 Просмотры
-
Последнее сообщение Zloydj