5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86

Работа с циклом if else.

29.01.2012, 12:28. Показов 4756. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго утра, дня или вечера! Кому как
Я понимаю, что, возможно, задаю очень глупый вопрос(заранее прошу прощения), но не могу разобраться с циклом.

C++
1
2
3
4
5
6
7
8
9
10
11
for (int i=sl->Count-1;i>=0;i--)
if (sl->Strings[i].Pos(edit3->Text))
{
String s=sl->Strings[i];
id=s.SubString(4,s.Pos("Name=")-4).ToInt();
sl->Delete(i);
sl->Delete(i-1);
sl->Delete(i-2);
break;
}
esle Form3->Show();
Если не находится нужного значения, то просто выскакивает ошибка и прога виснет. А надо, чтобы выскакивала другая форма без всяких ошибок.
Получилось только сделать, чтобы форма вместе с ошибкой выскакивала.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2012, 12:28
Ответы с готовыми решениями:

работа с циклом
Помогите пожалуйста!!! В памяти находятся пять чисел. Найдите наименьшее из них.

Работа с циклом
Ребят, я хочу, чтобы в каждой ячейке генерировался число и в каждой следующей ячейке число было на 1 единицу больше. Ну и я понимаю, что...

Работа с циклом FOR
День добрый, требуется циклом пройтись по комбобоксам и едитам и зделать их видимыми, ну или активными: for c:=1 to J do ...

44
43 / 7 / 0
Регистрация: 16.09.2009
Сообщений: 115
29.01.2012, 14:30
оттрассируй удаление переменной в цикле.
imho, ты просишь удалить то, чего нет.
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 14:34  [ТС]
Цитата Сообщение от any_stuff Посмотреть сообщение
оттрассируй удаление переменной в цикле.
imho, ты просишь удалить то, чего нет.
Цикл работает нормально и удаляет всё, что надо. Удаляет он строки, которые содержат значение из edit3. А мне надо, чтобы не найдя строк, содержащих значение из edit3, выдавалось сообщение, информирующее об этом.
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 14:50
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ищем текст
for (int i=sl->Count-1;i>=0;i--)
if (sl->Strings[i].Pos(edit3->Text))
{
String s=sl->Strings[i];
id=s.SubString(4,s.Pos("Name=")-4).ToInt();
sl->Delete(i);
sl->Delete(i-1);
sl->Delete(i-2);
// думаю лишнее.
//break;
}
// не нашли - вышли
else ShowMessage("Не нашли");
1
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 14:54  [ТС]
QVO, Сообщение "Не нашли" выдаёт, жму там "Ок" и оно выскакивает опять, и опять и так далее. Как быть?
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 15:10
ParadoxX27, секунду. после сообщения поставить break\return.
1
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 15:12  [ТС]
QVO, спасибо, работает
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 15:16
ParadoxX27, а это то что вам нужно?
если цикл в первой строке sl не находит текст из edit3, то прекращает поиск.
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 15:43  [ТС]
QVO, вот почему-то только щас догадался проверить всю работоспособность.
Немного не то.
Здесь цикл ищет значение из edit3, начиная с последней строки и идя в начало. Но, дойдя до начала и не найдя нужного значения поиск должен был прекратиться и выдать сообщение.
Вот что мне нужно.
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 15:51
ParadoxX27,
C++
1
2
3
4
5
6
7
8
        for (int i = ListBox1->Items->Count-1; i > -1; i--)
        {
                if (ListBox1->Items->Strings[i].UpperCase() == Edit1->Text.UpperCase())
                {
                        ShowMessage("Found");
                }
                else if (i == 0) ShowMessage("Not Found");
        }
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 16:00  [ТС]
QVO, Странно, сделал по аналогии - вообще ничего не происходит. Либо вне зависмости от того, есть или нет искомое значение в файле, всё равно выводит "не найдено". Т.е. даже, если я знаю, что такое значение есть и пытаюсь его найти, он всё равно выводит сообщение о том, что такого не найдено.
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 16:06
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
//--------------------------------
        TStringList *sl = new TStringList();
        sl->Add("Ноль");
        sl->Add("Один");
        sl->Add("Два");
        sl->Add("Три");
//--------------------------------
        for (int i = sl->Count-1; i > -1; i--)
        {
                if (sl->Strings[i].UpperCase() == Edit1->Text.UpperCase())
                {   
            /* Необходима проверка
            if(i > 1)
            {
                id=s.SubString(4,s.Pos("Name=")-4).ToInt();
                sl->Delete(i);
                sl->Delete(i-1);
                sl->Delete(i-2);
            }
                        */
                        ShowMessage("Found");
                }
                else if (i == 0) ShowMessage("Not Found");
        }
 
/*Проблема в том, если Искомое Слово будет найдене в строке с индексом 0..1,
то мы уйдем за пределы при удаление.*/
 
                        sl->Delete(0);
                        sl->Delete(0-1); // -1
                        sl->Delete(0-2); // -2
 
                        sl->Delete(1);
                        sl->Delete(1-1);
                        sl->Delete(1-2); // -1
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 16:10  [ТС]
Цитата Сообщение от QVO Посмотреть сообщение
/*Проблема в том, если Искомое Слово будет найдене в нулевой строке,
то мы уйдем за пределы при удаление.*
Искомое значение никогда не будет найдено в 0 или даже 1, там структура файла этого не допустит. В общем надо, получается, чтобы цикл, дойдя до 0 строки и не найдя нужного значения, завершался и выдавал сообщение. Вроде бы так оно и получается i==0, но всё равно работает не так, как надо. Или я что-то напутал?
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 16:19
ParadoxX27, прикрепил программу с таким кодом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//--------------------------------
        TStringList *sl = new TStringList();
        sl->Add("Ноль");
        sl->Add("Один");
        sl->Add("Два");
        sl->Add("Три");
//--------------------------------
        for (int i = sl->Count-1; i > -1; i--)
        {
                if (sl->Strings[i].UpperCase() == Edit1->Text.UpperCase())
                {
                        ShowMessage("Found");
                        break; // стоит добавить
                }
                else if (i == 0) ShowMessage("Not Found");
        }
 
}
//---------------------------------------------------------------------------
Работает
Вложения
Тип файла: rar sl.rar (9.3 Кб, 6 просмотров)
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 16:25  [ТС]
QVO, в ней, если пишу "Ноль", то выдаёт "найдено", а если что-нибудь из "Один", "Два" или "Три", то сначала "Найдено", а потом сразу "Не найдено". Почему так? О_о
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 16:47
ParadoxX27, потому что после того как нашли стоит добавить break я в коде написал же.
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
30.01.2012, 04:57  [ТС]
Цитата Сообщение от QVO Посмотреть сообщение
ParadoxX27, потому что после того как нашли стоит добавить break я в коде написал же.
Тогда работает. Сразу не заметил исправление.
Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i=sl->Count-1;i>-1;i--)
{
        if (sl->Strings[i].Pos(edit3->Text))
        {
        sl->Delete(i);
        sl->Delete(i-1);
        sl->Delete(i-2);
        break;
        }
        else if (i == 0)
        ShowMessage("Not Found");
        return;
}
Вот это не работает

Добавлено через 11 часов 43 минуты
Может бы ещё что-нибудь подскажет кто?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.01.2012, 06:04
1. не понятно, зачем искать "с хвоста"
2. для чего прерывать цикл после первого найденного совпадения (вот вам и "сначала "Найдено", а потом сразу "Не найдено"") - зачем break - цикл так долго работает или дальше сопадений не может быть по умолчанию ? может, достаточно просто перейти к следующе итерации: continue; - если очень уж хочется что-нибудь такое сделать ?
3. зачем
C++
1
2
3
sl->Delete(i);
sl->Delete(i-1);
sl->Delete(i-2);
, может, достаточно просто
C++
1
sl->Delete(i);
(где-то подобное уже обсуждалось )
4. и куда вы намереваетесь попасть после использования довольно гремучей смеси из else, ShowMessage и return ?
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
30.01.2012, 06:11  [ТС]
LK, 1. Надо искать именно с "хвоста", так задумано
2. После первого совпадения дальше совпадений быть не может.
3. Нужно удалить ещё 2 строки выше строки с индексом i, по этому и
C++
1
2
3
sl->Delete(i);
sl->Delete(i-1);
sl->Delete(i-2);
4. Ну по задумке, если совпадений после первого прохода по файлу нет - выскакивает сообщение об этом, которое закрывается нажатием "Ок" и предлагается изменить условия поиска.

Вот
0
30.01.2012, 06:19

Не по теме:

да мне как бы побарабану, просто спросил

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2012, 06:19
Помогаю со студенческими работами здесь

Работа с Циклом
Добрый вечер такой вопрос $(document).ready(function(){ $('#text').each(function(i, d){ $(d).proList();}); ...

Работа с циклом
Приветствую! Требуется ваша помощь. Кратко опишу проблематику: Допустим у нас есть сборка (деталь), которая состоит из других деталей...

Работа с циклом do while
Здравствуйте! есть задача в которой используется метод прогонки с проверкой условия. я использовала следующий цикл: ...

Работа с циклом
У меня есть вот такой цикл, здесь выводится список новостей $result = mysql_query("SELECT...

Работа с циклом do{}while();
Приветствую всех кто заглянул такая проблема сам цикл запускается но не отрабатывает почему то в чём может быть проблема? using...


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

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

Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru