658___________________________________________Глава 11

11.8.2.2 Оператор do—while

Структура do...while используется для организации циклического выполне-
ния оператора или совокупности операторов, называемых телом цикла, до тех пор,
пока не окажется нарушенным некоторое условие. Синтаксис управляющей струк-
туры do...while:

do оператор while (условие) ;

Структура работает следующим образом. Выполняется оператор тела цикла.
Затем вычисляется условие — выражение, которое должно возвращать результат
булева типа. Если выражение возвращает true (не нулевое значение), то повторяет-
ся выполнение тела цикла и после этого снова вычисляется выражение. Такое цик-
лическое повторение цикла продолжается до тех пор, пока проверяемое выраже-
ние не вернет false (нуль). После этого цикл завершается и управление передается
оператору, следующему за структурой do...while.

Поскольку проверка выражения осуществляется после выполнения тела цик-
ла, то цикл будет заведомо выполнен хотя бы один раз, даже если выражение сразу
ложно. С другой стороны, программист должен быть уверен, что выражение рано
или поздно вернет false. Если этого не произойдет, то программа «зациклится»,
т.е. цикл будет выполняться бесконечно. Иногда такие бесконечные циклы испо-
льзуются. Но в этом случае внутри тела цикла должно быть предусмотрено его
прерывание в какой-то момент, например, оператором break или другими способа-
ми, рассмотренными в разделе 11.8.2.4.

Обычно оператор do целесообразно использовать для организации поиска сре-
ди множества объектов того объекта, который обладает каким-то определенным
свойством. Причем заранее должно быть известно, что множество объектов не пус-
тое, т.е. хотя бы один объект в нем имеется. К тому же должен быть критерий, по-
зволяющий проверить, не является ли текущий объект последним. Тогда тел
цикла включает операторы перехода к новому объекту и какой-то его обработки,
условие while включает проверку, является ли объект не последним и отсутствую
ли у него искомые свойства. Если объект последний или искомые свойства найд
ны, выполнение цикла прерывается. Если же объект не последний и искомь
свойства у него не найдены, осуществляется переход к следующему объекту.

Если множество проверяемых объектов может быть пустым, следует испольа
вать другой оператор цикла — while (см. раздел 11.8.2.3). Если число повторена
циклов заранее известно, лучше применять оператор for (см. раздел 11.8.2.1).

Ниже приведен пример, в котором в файле Filel.txt ищется строка, содерж;

щая фрагмент текста (последовательность символов с учетом регистра), указанны
пользователем в окне редактирования Editl. Проверка наличия в строке заданно!
фрагмента проверяется функцией strstr. Окончание файла проверяется функцие
feof.

FILE *F;

char S[256] = "";

AnsiString SKey = Editl->Text;

if((F = fopen("Filel.txt","r")) == NULL)
{

ShowMessage("Файл не найден");

return;

)

do
fgets(S,25?,F) ;

while(!feof(F)&&(strstr(S,SKey.c_str()) == NULL));

fclose(F);                                                            ,
if (strstr(S,SKey.с str()) == NULL)