Справочные данные по языку C++___________________________659

Цикл будет выполняться, до тех пор, пока не достигнут конец файла и пока
функция strstr возвращает NULL (фрагмент не найден). Если хотя бы одно из этих
условий нарушается (достигнут конец файла или найден фрагмент), выполнение
цикла прекращается.

11.8.2.3 Оператор while

Оператор while используется для организации циклического выполнения тела
цикла, пока выполняется некоторое условие. Синтаксис структуры while:

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

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

Поскольку проверка выражения осуществляется перед выполнением оператора
тела цикла, то, если условие сразу ложно, оператор не будет выполнен ни одного раза.

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

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

Ниже повторен приведенный в предыдущем разделе пример поиска в файле
Filel.txt фрагмента текста, указанного пользователем в окне редактирования
Editl. Но если в предыдущем разделе для организации цикла использовался опе-
ратор do...while, то в данном случае использован оператор while. Этот оператор
здесь более уместен, поскольку проверка конца файла осуществляется до начала
цикла, т.е. до чтения из него строки. Поэтому все будет нормально работать даже в
случае, если файл окажется пустым и в нем не будет ни одной строки.

FILE *F;

char S[256] = "";

AnsiString SKey = Editl->Text;

if((F = fopen("Filel.txt","r")) == NULL)
(
ShowMessage("Файл не найден");

return;

)

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

fclose(F) ;

if (strstr(S,SKey.c_str()) == NULL)