Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/33: Рейтинг темы: голосов - 33, средняя оценка - 4.85
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732

Функция и break

25.09.2011, 23:48. Показов 6859. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно есть у меня некий код ( он не интересен), который я решил сделать функцией. Функцию так уж сложилось я пробую создать впервые. Ну и вот столкнулся с проблемой - кусок кода, который я решил сделать функцией находится в цикле. Цикл этот можно перервать нажатием на батон (присваиванием булевой переменной тру и проверки оной в цикле, ну и там некие действия и брейк. Но если написать в реализации или как оно называется функции этот кусок с брейк, вполне ожидаемо misplaced break. Как с этим бороться?


а, и еще 1 вопросик. Создаются временные файлы с именами temp.* (их несколько) , которые сохраняются в папке, где должен быть конечный файл, ну и когда конечный файл создан, то удаляются. Проблема в том, что иногда они удаляются нормально, а иногда почему то нет. Вот почему они могут не удалятся?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.09.2011, 23:48
Ответы с готовыми решениями:

While{switch{switch{break;}}} break выходит из while
В общем необходимо конструкцию switch запускать в цикле, в каждом case X: стоит свой break;, да бы выполнился один case, а не все. Проблема...

if(){break;}
Помогите разобраться с действием break в MFC for(int i=0;i<8;i++){ if(i==3){break;} }

Использование break;
Всем привет, объясните пожалуйста, человеческим языком, такой пример из php. ‹html› ‹head› ‹title›Особенности оператора...

31
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.09.2011, 00:03
1. недавно обсуждалось - пришли к мнению, что использовать не брик , а бул, если - истина - цикл работает, если ложь - цикл прерывается
2. причин может быть миллион, наиболее вероятнее, файл еще не освобожден программой, т.е., нет к нему доступа, по умолчанию сие не исключение не обрабатывается, у меня, по всяком случае, поробуйте код удаления заключить в
C++
1
2
3
4
5
try {
// ваш код
} catch (Exception &e) {
  e.Message;
}
, может, скажет чего, и/или используйте GetLastError();
3. в вашей подписи средний иероглиф глючит
1
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.09.2011, 00:18  [ТС]
дык так и есть, если бул тру тогда действия и брейк. как по другому его перервать то ?
ну должен бы освободится, как бы жду
C++
1
WaitForSingleObject(pi.hProcess, INFINITE);
и потом уже удаляю
getlasterror возвращает 2
нифига он не глючит, отображается как должен. кстати, не надо идти транслейтить гуглем, он не правильно и так переводит. и хорош обращаться ко мне на вы
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.09.2011, 00:30
да , бул упустил...
тяжело что-нибудь сказать без кокретного примерного кода, сам понимаете

не гуглем, фирменный словать по спецзаказу из Поднебесной
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.09.2011, 00:50  [ТС]
какой кусок тебя интересует? про файлы или про брейк?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.09.2011, 00:54
дык, про файлы что - там, небось FindFirst...FindNext..Delete
да и с циклом -
Но если написать в реализации или как оно называется функции этот кусок с брейк, вполне ожидаемо misplaced break.
- это уже misplaced break было или в стадии предчувствий?
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.09.2011, 00:56  [ТС]
было уже, было.
а про файлы там без заморочек
C++
1
2
UnicodeString temp3 = path + "Temp.avi";
DeleteFile(temp1.w_str()
путь проверял, там все норм
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.09.2011, 01:08
UnicodeString temp3 = path + "Temp.avi";
DeleteFile(temp1.w_str()
так задумано ?
если было - изложите вкратце историю болезни .
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.09.2011, 01:10  [ТС]
их там 3, так что
C++
1
2
3
4
5
6
7
        UnicodeString temp1 = path + "Temp.264";
        UnicodeString temp2 = path + "Temp.aac";
        UnicodeString temp3 = path + "Temp.avi";
 
        if(!DeleteFile(temp1.w_str()))      ShowMessage(GetLastError());
        if(!DeleteFile(temp2.w_str()))      ShowMessage(GetLastError());
        if(!DeleteFile(temp3.w_str()))      ShowMessage(GetLastError());
не заметил который скопировал
болезни нема

ну и вот горе попытка создания функции
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
void __fastcall TForm1::enc(UnicodeString first_cmd, int i){
CreatePipe(&read_stdout, &newstdout, &sa, 0);
            unsigned long exit = 0;
        unsigned long bread;
        unsigned long avail;
 
        GetStartupInfo(&si);
        si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
        si.wShowWindow = SW_HIDE;
        si.hStdOutput = newstdout;
        si.hStdError = newstdout;
        a = 1;
        CreateProcess(L"mencoder.exe", first_cmd.w_str(), 0, 0, 1,
            CREATE_NEW_CONSOLE, 0, 0, &si, &pi);
        UpdateWindow(Form1->Handle);
        for (; ;) {
            GetExitCodeProcess(pi.hProcess, &exit);
 
            if (exit != STILL_ACTIVE)
                break;
 
            ///////////////////////////////////
            if (stop) {
                ((TGauge*)StringGrid1->Objects[1][i])->Progress = 0;
                break;
            }
            ///////////////////////////////////
 
            PeekNamedPipe(read_stdout, buf, 1023, &bread, &avail, NULL);
            if (bread != 0) {
                bzero(buf);
                if (avail > 1023) {
 
                    while (bread >= 1023) {
                        ReadFile(read_stdout, buf, 1023, &bread, NULL);
                        Application->ProcessMessages();
                        UnicodeString str;
                        str = buf;
                        int pos1 = str.Pos("f (");
                        int pos2 = str.Pos("%)");
                        TryStrToInt(str.SubString(pos1 + 3,
                            pos2 - pos1 - 3), k);
                        if (k > a && k > 0) {
                            ((TGauge*)StringGrid1->Objects[1][i])->Progress = k;
                            a = k;
                        }
                        bzero(buf);
                    }
                }
                else {
 
                    ReadFile(read_stdout, buf, 1023, &bread, NULL);
                    Application->ProcessMessages();
                    UnicodeString str;
                    str = buf;
                    int pos1 = str.Pos("f (");
                    int pos2 = str.Pos("%)");
                    TryStrToInt(str.SubString(pos1 + 3, pos2 - pos1 - 3), k);
                    if (k > a && k > 0) {
                        ((TGauge*)StringGrid1->Objects[1][i])->Progress = k;
                        a = k;
                    }
 
                }
 
            }
 
        }
        ///////////////////////////////////////
 /*     if (stop) {
            TerminateProcess(pi.hProcess, 0);
            WaitForSingleObject(pi.hProcess, INFINITE);
            CloseHandle(pi.hThread);
            CloseHandle(pi.hProcess);
            CloseHandle(newstdout);
            CloseHandle(read_stdout);
            stop = false;
            working = false;
            offset = i;
            UnicodeString temp1 = path + "Temp.avi";
            DeleteFile(temp1.w_str());
            break;
        }  */
        ///////////////////////////////////////
        ((TGauge*)StringGrid1->Objects[1][i])->Progress = 100;
        CloseHandle(pi.hThread);
        CloseHandle(pi.hProcess);
        WaitForSingleObject(pi.hProcess, INFINITE);
        CloseHandle(newstdout);
        CloseHandle(read_stdout);
 
 
 
}
то что откоментировано и есть проблема =/
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.09.2011, 01:33
если if- то return; , имхо, и цикл с его break; здесь ни при чем
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.09.2011, 01:40  [ТС]
Не понял тебя.
А насчет файлов, что код 2 значит то?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.09.2011, 01:47
1. напишите return; вместо break;
2. try - catch ? - отлавливание жучков-ошибок, т.е., обработка исключений
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.09.2011, 11:32  [ТС]
так цикл в котором функция будет использована совсем не прерывается
а так,
C++
1
2
3
4
    try {
 DeleteFile(temp3.w_str());
} catch (Exception &e) {
  ShowMessage(e.Message);
ничего не показывает, хотя файлы и остались и не были удалены
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.09.2011, 17:51
то что откоментировано и есть проблема
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// ...
    UpdateWindow(Form1->Handle);
    for (; ;) { // НАЧАЛО ЦИКЛА
            // ТЕЛО ЦИКЛА
    } // КОНЕЦ ЦИКЛА
    ///////////////////////////////////////
// УСЛОВИЕ ВНЕ ЦИКЛА
 /*       if (stop) {
      TerminateProcess(pi.hProcess, 0);
      WaitForSingleObject(pi.hProcess, INFINITE);
      CloseHandle(pi.hThread);
      CloseHandle(pi.hProcess);
      CloseHandle(newstdout);
      CloseHandle(read_stdout);
      stop = false;
      working = false;
      offset = i;
      UnicodeString temp1 = path + "Temp.avi";
      DeleteFile(temp1.w_str());
//    break;
      return; // ЕСЛИ ОСТАНОВЛЕНО - ЧТО-ТО ТАМ УБИВАЕМ
                 // ВОЗВРАЩАЕМСЯ К ПРЕДЫДУЩЕМУ СОСТОЯНИЮ
    }  */
Цитата Сообщение от Flyer Посмотреть сообщение
так цикл в котором функция будет использована совсем не прерывается
разговор был про цикл и условие - они друг от друга не зависят, а что там и где будет использовано... дальше -
C++
1
DeleteFile(temp1.w_str());
- при срабатывании условия удаляется тот файл, который вы указали - к остальным претензии нет, или указать
C++
1
2
3
4
5
DeleteFile(temp1.w_str());
DeleteFile(temp2.w_str());
DeleteFile(temp3.w_str());
DeleteFile(temp4.w_str());
DeleteFile(tempN.w_str());
или в новом цикле
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.09.2011, 20:04  [ТС]
ладно, неважно. проблему с прерыванием цикла я допустим решил.
с файлами ты не очень понял. тут (при прерывании ) файл нормально удаляет. не удаляет иногда (рандомно) , когда все программы закончат работу с файлом.
Новая проблема - при прерывание цикла, программа больше не запускается почему то ( та, что в креейт процесс) =/
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
26.09.2011, 21:08
Flyer,
misplased break означает что тут breake Не паложено!

тебе не bреак надо а try... catch... (или try __finally)

и как
LK, сказал return тоже подайдёт
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.09.2011, 21:20  [ТС]
Знаю я, что misplaced break означает. Ретарн не прерывает цикл. Что сказал LK я вижу и сам, не нужно мне повторять. И проблему я уже решил. А причем тут трай кетч я вообще не понимаю .
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.09.2011, 21:41
в чем была проблема ?

файл нормально удаляет. не удаляет иногда (рандомно) , когда все программы закончат работу с файлом.
- вот это появилось только что - может, в этом и была проблема - в отсутствии достаточной информации для анализа ситуации, а по отдельным "цитатам" лечить сложно
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
26.09.2011, 22:00  [ТС]
Вынес этот кусок с ифом вне функции и чуть чуть ее переделал
С файлами. Давай попробую поподробнее объяснить.
Случай первый. При прерывании удаляется всегда нормально. Проблем нету.
Случай второй. Запускается менкодер, результатом является temp.avi. Запускается менкодер опять и из этой авишки извлекается видео поток. Третий раз то же, только аудио поток. То есть, после 3 запусков имеем temp.avi, temp.h264, temp.aac. Четвертый раз запускается другая прога, она склеивает видео и аудио поток в мп4. Результат -> mp4, и три временных файла avi, aac, h264. Вот 3 временных этих файла рандомно не удаляются. Иногда все 3, иногда 2 или 1. Закономерность в их нестирании я не заметил.
П.С. Такой странный подход нужен изза особеностей оборудования , на котором это видео должно проигрыватся.

Надеюсь, так более менее понятно
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.09.2011, 22:04
дык, рандомно - сам указал - вот и
Иногда все 3, иногда 2 или 1.
- а если не рандомно ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2011, 22:04
Помогаю со студенческими работами здесь

Заменить break
здравствуйте. помогите разобраться. нужно заменить break в теле цикла(точнее от него избавиться), но чтобы алгоритм программы остался таким...

Кнопка break
у меня ноутбук dell .... нужна кнопка break а ее ни где нету...подскажите где ее найти либо какие сочитания клавишь эмулируют ее......

Break 2х циклов
Всем привет, есть цикл a и цикл b, который находиться в цикле а, можно ли как-то одной строкой из цикла б остановить выполнение сразу двух,...

Break и Exit
Break; - это функция выхода из цикла, при чем если за этим цикл по строкам кода стоит еще какой-то другой цикл то следующий цикл уже будет...

Misplaced break
#include<stdio.h> #include<conio.h> main() { clrscr(); int a; scanf("%i",&a); switch (a); { ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
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 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru