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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2012, 21:51   #1
aank10
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 81
По умолчанию Останока функции

Где в этой функции нужно поставить break или goto что бы после нахождения файла 1.txt происходило (прерывание) остановка функции?
Код:
void Scan(AnsiString Path)
{
  TSearchRec sr;
  if(FindFirst(Path + "*.*", faAnyFile, sr) == 0)
    {
      do
        {
          if(sr.Attr & faDirectory)
            {
              if((sr.Name != ".") && (sr.Name != ".."))
                Scan(Path + sr.Name + "\\");
            }
          else
            {
              if(sr.Name == "1.txt)
                {ShowMessage(Path + sr.Name);
                return ;
                }
            }
        }
      while(FindNext(sr) == 0);
      FindClose(sr);
    }
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
Scan("C:\\");
}
пробовал break ставить после первого if и после
Код:
ShowMessage(Path + sr.Name);
не работает
aank10 вне форума Ответить с цитированием
Старый 01.04.2012, 21:57   #2
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

Так у вас же тут кавычки не закрыты:
Код:
if(sr.Name == "1.txt)
Если бы действительно нашёл - сработал бы return и break вам не нужен был бы
"Думай не о задаче, а о решении" (с)

Последний раз редактировалось LiuLiuJons; 01.04.2012 в 21:59.
LiuLiuJons вне форума Ответить с цитированием
Старый 01.04.2012, 23:12   #3
aank10
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 81
По умолчанию

это опечатка, в программе все нормально и не работает, функция продолжает поиск во всех папках и подпапках
aank10 вне форума Ответить с цитированием
Старый 01.04.2012, 23:23   #4
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

этоже рекурсия, нужно вставить где нибудь булевую переменную и начать раскручивать, чтото типа такого
Код:
bool find;
void Scan(AnsiString Path)
{
  TSearchRec sr;
  if(FindFirst(Path + "*.*", faAnyFile, sr) == 0 && !find)
    {
      do
        {
          if(sr.Attr & faDirectory)
            {
              if((sr.Name != ".") && (sr.Name != ".."))
                Scan(Path + sr.Name + "\\");
            }
          else
            {
              if(sr.Name == "1.txt)
                {ShowMessage(Path + sr.Name);
                find = true;
                return ;
                }
            }
        }
      while(FindNext(sr) == 0  && !find);
      FindClose(sr);
    }
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
find = false;
Scan("C:\\");
}
microbit вне форума Ответить с цитированием
Старый 02.04.2012, 09:50   #5
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

при использовании условного оператора if, break использовать нельзя.
Drugnir вне форума Ответить с цитированием
Старый 02.04.2012, 10:44   #6
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

Цитата:
Сообщение от Drugnir Посмотреть сообщение
при использовании условного оператора if, break использовать нельзя.
Это ещё почему? Вполне же работает.
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Старый 02.04.2012, 12:01   #7
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

Цитата:
Сообщение от LiuLiuJons Посмотреть сообщение
Это ещё почему? Вполне же работает.
Да? А покажите-ка мне код рабочий.

Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.

Последний раз редактировалось Drugnir; 02.04.2012 в 12:06.
Drugnir вне форума Ответить с цитированием
Старый 02.04.2012, 12:10   #8
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

Есть у меня вполне рабочий код.
Неубедительно ваше утверждение. Да действительно код выходит лишь из одного цикла, а если за ним ещё один - введите флаг и напишите ещё один break, делов то. Break вполне работает с if или вы хотите сказать, что сразу надо return использовать? Нет конечно. Бывает, что и только из одного цикла надо выйти. А ретурн вынесет вообще из процедуры.
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Старый 02.04.2012, 12:16   #9
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

Вы не верно поняли, использование break без циклов не возможно, имелось ввиду. Это не мое утверждение, а утверждение авторов книги С++ Бархатный путь.)

Последний раз редактировалось Drugnir; 02.04.2012 в 12:23.
Drugnir вне форума Ответить с цитированием
Старый 02.04.2012, 14:52   #10
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

Цитата:
Сообщение от Drugnir Посмотреть сообщение
Вы не верно поняли, использование break без циклов не возможно, имелось ввиду. Это не мое утверждение, а утверждение авторов книги С++ Бархатный путь.)
Ну да, это очевидно. Но ведь в примере был цикл и ТС как раз хотел из него выйти, поэтому ваше замечание трудно понять..
Другое дело, что здесь ни break, ни return не пойдут.
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets dmitrii6120 Помощь студентам 6 14.11.2011 20:10
Мини бэйсик:объявление функции, вызов функции , возврат. AL_LORD Помощь студентам 2 14.10.2010 17:48
Программа на СИ++, используя функции работы с файлами и функции <string.h> Аня Popova Фриланс 9 13.09.2010 15:52
Чем отличается описание функции от определения функции в С++? Go6a Помощь студентам 4 18.07.2009 18:07
Функции. Передача массива в качестве параметра функции. Wia Помощь студентам 2 17.03.2009 14:57