Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2010, 20:28   #21
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

Vago, не верно.
Код:
else {
            for (int j=0;j<words->Count;j++) {
               string s = words->Strings(j);
               if (Check(s,temp,filter,report) > -1) {
                  if (filter.changeto != "") list->Rewrite(s,i);
                     ret = true;
                  report.out += "with transform " + words->Strings(j) + "\n";
               }
            }
это должно выполниться если слово возможно "hided".
подпись

Последний раз редактировалось liljon; 16.07.2010 в 20:36.
liljon вне форума Ответить с цитированием
Старый 16.07.2010, 20:54   #22
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

hide - неправильный глагол. hide - hid - hidden
...
Вы хотите сказать, что в этот else Ваша программа попадает после самого первого (самого верхнего) goto EXCEPT; ? Ой ли?...
Vago вне форума Ответить с цитированием
Старый 16.07.2010, 21:02   #23
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

нет, попадет, если утверждение верно, после всех проверок
подпись
liljon вне форума Ответить с цитированием
Старый 16.07.2010, 21:25   #24
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Простите, какое утверждение? Скопипастите тот оператор if, о котором Вы сейчас говорите, если Вас не затруднит...
Vago вне форума Ответить с цитированием
Старый 16.07.2010, 22:25   #25
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

стойте...
Вообщем в цикле "for (int i=0;i<c;i++)", после FindWords, идет анализ каждого слова. А вы выходите из функции если найдено слово исключение (просто вы не до конца разобрались), тоесть последующие слова анализироваться не будут.
Функция CheckHideWord проверяет заэвуалировано ли слово, и если да установит флаг ret в true, что после анализа всех слов будет значит, что нужно изменить строку. Все слова разделяються и ложаться в список list и если необходимо найденное слово заменить другими символами, то это слово в этом же списке, просто перезаписывается. А дальше строка восстанавливаеться из него же в самом конце.

Код:
	if (ret)
	{
		//Восстанавливаем строку
		if (filter.changeto != "")
		{
			str = "";
			for (int i=0;i<list->Count;i++)
			{
				str += list->Strings(i) + " ";
			}
			str.erase(str.length()-1,1);
		}
	}
goto может и усложняет анализ чужого кода, но у меня их не сотня в коде и все ссылаються только на одну метку, goto действительно помогает сократить колличество кода, и если вдруг надо что-то исправить, то меньше прийдеться поменять.

Ну исправите вы код без goto, но больше текста прибавиться, вот к примеру вы вписали еще одну функцию,а тот кто будет анализировать ваш код, возьмет и не поймет зачем она нужна, точнее поймет, но со временем (на это ведь тоже уйдет время. Образно говоря прибавяться ветки условий, а разве это не затруднит понимание кода?). Хотя интуитивно ясно, что значит isExcept, так же само можно интуитивно понять что за метка такая EXCEPT. В любом случае анализировать чужой код всегда тяжело, и не говорите, что из за моих безусловных переходов вы плохо разобрались, разбораться плохо можно в любом коде, я например чаще всего прибегаю к дебагеру и построчно прогоняю код. Ведь не всегда взглянув на чужой код становиться ясно что и где, правильно? Или вы хотите сказать, что не прогоняете код в дебагере? Так и с моими goto, если не ясно - дебагер.

Я не считаю, что в приведенном мною примере все очень запутано. goto может быть очень полезен в парсерах текста, ну и при выходе из вложеных циклов, больше незачем его куда-то лепить.
подпись

Последний раз редактировалось liljon; 16.07.2010 в 22:31.
liljon вне форума Ответить с цитированием
Старый 16.07.2010, 23:19   #26
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

1. По технической стороне вопроса. Этот код включаем в ф-ю:
Код:
bool IsExcept( string &str, FILTER filter, LList* list, REPORT& report, string line, int i ) {

   bool ret = false ;

   if ( filter.changeto != "" )
      list->Rewrite(line,i) ;
   if ( report.type != EXCEPT_TRUE ) {
      ret = true ;

      //Восстанавливаем строку
      if ( filter.changeto != "" ) {
         str = "";
         for (int i=0; i<list->Count; i++) {
            str += list->Strings(i) + " " ;
         }
         str.erase( str.length()-1,1 ) ;
      }
   }

   return ret ;

}
а обращения к ней в цикле примут вид:
Код:
if ( IsExcept( str, filter, list, report, line, i ) ) continue ;
2. Что до идеологической стороны - абсолютно с Вами не согласен, но спорить не буду. Если Ваши коллеги (заказчики, начальники, сопровождающие программисты, преподаватели...) терпят браваду "написана она была ... без коментов." - это их проблемы.
Vago вне форума Ответить с цитированием
Старый 17.07.2010, 12:01   #27
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

Цитата:
Что до идеологической стороны - абсолютно с Вами не согласен
А я с вами. Почему goto полезен я уже постарался объяснить.
И все-равно употребление goto в разумных колличествах упрощает код. Да ну вас... всегда буду использвать безусловные переходы в парсерах. Одна - две метки это нормально. Может в ассемблере тоже стоит jmp запретить? А то не безопасно как-то и затрудрняет понимание кода.
подпись

Последний раз редактировалось liljon; 17.07.2010 в 12:06.
liljon вне форума Ответить с цитированием
Старый 17.07.2010, 12:57   #28
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от liljon Посмотреть сообщение
всегда буду использвать безусловные переходы в парсерах.
И обязательно почаще передавайте управление внутрь if- else- и for-блоков.

Удачи в профессиональной карьере!
Vago вне форума Ответить с цитированием
Старый 17.07.2010, 13:14   #29
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

я думаю, что практически всегда можно обойтись без goto. Компилятор сам решит где его поставить в асм
NiCola999 вне форума Ответить с цитированием
Старый 24.07.2010, 14:03   #30
Oleg_SK
Пользователь
 
Регистрация: 06.06.2010
Сообщений: 42
По умолчанию

Цитата:
Сообщение от wyvern Посмотреть сообщение
И то, последнее время все чаще и чаще слышу советы в данной ситуации использовать try-catch блок и просто-напросто из глубины циклов выкидывать простенькое исключеньице...
Нашел на сайте http://insidecpp.ru антиратерн, который как раз относится к использовании механизма исключений для таких целей:
Цитата:
Exception handling
Этот антипаттерн представляет собой реализацию нормальной логики работы программы с помощью механизма исключений. Например, рекурсивный поиск по дереву может в качестве результата поиска кидать исключение. Такая реализация на первый взгляд может выглядеть заманчиво и удобно, но не более чем на первый взгляд.
Исключения должны использоваться с одной единственной целью — проинформировать систему об ошибке. Использование исключений как инструмента для управления логикой программы вносит неоднозначность. Глядя на конструкцию try-throw-catch, программисту совершенно не очевидно, для чего именно эта конструкция используется. Кроме того, управление логикой через исключения и система оповещения об ошибках, построенная на исключениях, могут попросту мешать друг другу, поскольку они построены на одном механизме.
Для обработки ошибок используйте только исключения, а исключения — только для обработки ошибок.

Последний раз редактировалось Oleg_SK; 24.07.2010 в 14:08.
Oleg_SK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. использование условного оператора в теле операторов цикла с условием и после него машко Помощь студентам 1 22.06.2009 00:52
использование условного оператора после операторов цикла с условием машко Помощь студентам 8 21.06.2009 23:59
использование условного оператора в теле оператора цикла с условием машко Помощь студентам 2 21.06.2009 23:55
Использование оператора условия Virtson Microsoft Office Access 2 15.12.2006 16:13