Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637

Непонятки с условием if() и циклом for()

25.02.2013, 21:47. Показов 1146. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вечер добрый.
Ребята проблема такая написал функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::ProverkaMD5(TStringList *Spisok)
{
  TStringList *log= new TStringList();
  for(int i = 0; i<= Spisok->Count; i++){
    AnsiString stroka = Spisok->Strings[i];
    if(stroka.Pos("<tr class=\"off\"")!=0)
    {
        log->Add("был");
        log->Add(Spisok->Strings[i]);
        //log->Add(Spisok->Strings[i+3]);
        break;
    }
  }
     RichEdit1->Text = log->Text;
 
}
которая должна найти в списке "Spisok" строку содержащая подстроку <tr class="off" и занести ее в списог log(log->Add(Spisok->Strings[i])) и прекратить цикл. И затем вывести список log в ричьЕдит, содержащая строку где есть подстрока <tr class="off".

Но она выводит весь список "Spisok" и только в начале строку был(log->Add("был")), как бы игнорируя условие if(stroka.Pos("<tr class=\"off\"")!=0) и инструкцию break

Весь день парюс с этим, и ни как не могу понять где ошибка, что я не так сделал?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2013, 21:47
Ответы с готовыми решениями:

Нужна прога с пред условием и пост условием и циклом
Написать прогу с-пред пост условием и циклич. Дано натуральное n, и действительное Х вычислить : Sin X +SinSin X+SinSinSin X+.... ...

Непонятки с циклом for
Установил Visual Studio 2015. Пишу следующий код: #include &lt;iostream&gt; using namespace std; void main() { int i; ...

Возикают непонятки с циклом
rewrite_info.WriteLine(&quot;{0},{1},{2},{3},{4}&quot;, name_textbox_edit_form.Text.ToString(), author_textbox_edit_form.Text.ToString(),...

8
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
26.02.2013, 04:48
Xank,
Цитата Сообщение от Xank Посмотреть сообщение
Но она выводит весь список "Spisok"
Кто она? RichEdit1-ка?

Если честно, я не врубился
Если одна из строк списка "Spisok" содержит текст <tr class="off", то согласно Вашему коду, эта строка (вместе с предшествующей строкой был) попадет в log, а потом уже в RichEdit1.
А как надо?

Цитата Сообщение от Xank Посмотреть сообщение
Но она выводит весь список "Spisok" и только в начале строку был(log->Add("был")), как бы игнорируя условие if(stroka.Pos("<tr class=\"off\"")!=0) и инструкцию break
Запись в log происходит только при нахождении текста <tr class="off" в текущей строке (выполнение if). Соответственно ни if, ни break игнорироваться не могут.
1
Кандёхаем веселее!
 Аватар для MLPMan
296 / 330 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
26.02.2013, 05:22
Цитата Сообщение от Xank Посмотреть сообщение
C++
1
 for(int i = 0; i<= Spisok->Count; i++)
Индекс последного элемента Spisok->Count-1, 4-ю строку следует заменить на
C++
1
 for(int i = 0; i< Spisok->Count; i++)
1
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
26.02.2013, 13:15
я лично не вижу тут ошибок:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//---------------------------------------------------------------------------
void __fastcall TForm1::ProverkaMD5(TStringList *Spisok)
{
    RichEdit1->Lines->Clear();
    for(int i = 0; i < Spisok->Count; i++)
    {
        if(Spisok->Strings[i].Pos("<tr class=\"off\"") > 0)
        {
            RichEdit1->Lines->Add->Add("был");
            RichEdit1->Lines->Add->Add(Spisok->Strings[i]);
            break;
        }
    }
}
//---------------------------------------------------------------------------
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
26.02.2013, 18:36  [ТС]
Цитата Сообщение от The_Immortal Посмотреть сообщение
Если одна из строк списка "Spisok" содержит текст <tr class="off", то согласно Вашему коду, эта строка (вместе с предшествующей строкой был) попадет в log, а потом уже в RichEdit1.
Как раз так и надо. А происходит просто копирования списка "Spisok" в список "log" добавляя в начале всего списка строку был, как бы игнорируя условие, ка будто я написал такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::ProverkaMD5(TStringList *Spisok)
{
  TStringList *log= new TStringList();
   log->Add("был");
 
  for(int i = 0; i<= Spisok->Count; i++){
   AnsiString stroka = Spisok->Strings[i]; 
   // if(stroka.Pos("<tr class=\"off\"")!=0)
        
        log->Add(Spisok->Strings[i]);
  }
     RichEdit1->Text = log->Text;
 
}
Вся суть этой функции она должна вывести в log две строчки
Code
1
2
был
строка содержащая подстроку <tr class="off"
И все, а выводит весь список.

Цитата Сообщение от The_Immortal Посмотреть сообщение
Кто она? RichEdit1-ка?
Функция после завершения должна вывести в RichEdit1, все содержимое списка log. А именно всего две строки
Code
1
2
был
строка содержащая подстроку <tr class="off"
Цитата Сообщение от The_Immortal Посмотреть сообщение
Запись в log происходит только при нахождении текста <tr class="off" в текущей строке (выполнение if). Соответственно ни if, ни break игнорироваться не могут.
А у меня этого, что не происходит. У меня заносятся все строки, все. Только в начале строка с текстом был. Заметьте в НАЛЕ, а не при нахождение подстроки <tr class="off"

Добавлено через 2 минуты
Цитата Сообщение от Gremlin Посмотреть сообщение
я лично не вижу тут ошибок:
Громатической или фатальной ошибки нет. А вот выполняет не то, что хотелось. Игнорирует и условие if() и инструкцию break.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.02.2013, 19:10
Явных ошибок действительно нет (но инициализировать переменную в цикле - AnsiString stroka = ... - не очень красиво) и это работает; вот только я проверял, используя Memo в качестве списка__
C++
1
(Spisok->Assign(Memo1->Lines) ;
Возможно следует присмотреться к параметру Spisok ?
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
26.02.2013, 19:42  [ТС]
Вся ошибка в другой функции а именно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::MD5Click(TObject *Sender)
{
   TStringList *Zapros = new TStringList();
   String url = "";
   String virscan = "http://md5.virscan.org/3530daee3919ada8fe865c795693798c";
   String md5 = EditMD5->Text;  //Едит содержит
   url = virscan;
 
   Zapros->Add(IdHTTP1->Get(url));
   RichEdit2->Text = Zapros->Text;
   if(Zapros->Count !=0)
      ProverkaMD5(Zapros);
   Zapros->Clear();
   delete Zapros;
}
Она создает список одной строкой, то есть весь текст одной строкой (Zapros->Count ==1).
Я переписал так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::MD5Click(TObject *Sender)
{
   TStringList *Zapros = new TStringList();
   String url = "";
   String virscan = "http://md5.virscan.org/3530daee3919ada8fe865c795693798c";
   String md5 = EditMD5->Text;  //Едит содержит
   url = virscan;// + md5; // md5 может сразу подставляться из функции передачи
 
 
   RichEdit2->Lines->Add(IdHTTP1->Get(url)); // с начало заношу в RichEdit2-
   Zapros->Text = RichEdit2->Text;// а потом уже и в список.
 
   if(Zapros->Count !=0)
      ProverkaMD5(Zapros);
   Zapros->Clear();
   delete Zapros;
}
То есть, загрузил страницу с начало в РичЕдит2, а потом содержимое РичЕдита2 передал Списку. И все работает.

По чему такой баг?


Цитата Сообщение от nick42 Посмотреть сообщение
но инициализировать переменную в цикле - AnsiString stroka = ... - не очень красиво)
Я в начале ее не инициализировал, я уже ее потом объявил. Грешил на .Pos() списка.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
26.02.2013, 20:28
Xank, это не баг

Можно сразу таким образом:

C++
1
2
3
4
5
6
7
8
  {   
   ...
   Zapros->Text = IdHTTP1->Get(url);
   if(Zapros->Count !=0)
      ProverkaMD5(Zapros);
   Zapros->Clear();
   delete Zapros;
  }
Text

Lists the strings in the TStrings object as a single string with the individual strings delimited by carriage returns and line feeds.
Add

Adds a new string to the list.
1
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
26.02.2013, 20:42  [ТС]
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2013, 20:42
Помогаю со студенческими работами здесь

Непонятки с функциями или циклом
Данный код должен рассчитывать сумму (s), пока сумма меньше либо равна некому числу f. У меня почему-то всегда на выходе s=0 #include...

Непонятки с циклом: не заполняются ячейки
Имеется код Sub Sec() Dim i As Long, pi As Double, x As Double pi = WorksheetFunction.pi i = 1 Do While...

Update с циклом и условием
Ребят есть такая задача: имеется таблица remont и таблица TempTable у обеих эти таблиц есть поле N_CH типа INT мне нужно: сравнить эти...

Макрос с циклом и условием
Есть 2 таблички: 1 Таблица: ФИО - не заполнено. Телефон 2 Таблица Тариф Телефон ФИО

Массив с условием и циклом
Помогите написать задачу, с комментариями, буду очень благодарен! Имеется последовательность чисел, состоящая из n элементов. Определить...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru