700___________________________________________Глава 12

нем какое-то ключевое слово. Но это становится недостатком, если надо просто
прочесть строку целиком.

В классе ifstream имеется еще два метода чтения из потока: get и getline. Ме-
тод get имеет три модификации: get(), get(char) и get(char *, int n, char delim).

Функция get без аргументов вводит одиночный символ из указанного потока
(даже, если это символ разделитель) и возвращает этот символ в качестве значения
вызова функции. Этот вариант функции get возвращает EOF, когда в потоке встре-
чается признак конца файла.

Следующий код использует функцию get без аргумента, чтобы построчно чи-
тать и обрабатывать весь текст файла:

char s[80], с;

ifstream infile("Test.dat");

if(!infile)
f

ShowMessage("Файл не удается открыть");

return;

)

int i = 0;

while!(с = infile.get()) != EOF)
(

if(c == •\n')

(

// занесение нулевого символа в конец строки
s[i] = 0;

// обработка строки

i = 0;

)

// формирование строки
else s[i++] = с;

}

// закрытие файла
infile.close ();

Здесь символы файла поочередно читаются в символьную переменную с. Если
прочитанный символ не является символом перевода строки «/n», то символ до-
бавляется в строку s. Если же символ равен «/n», то в конец строки заносится ну-
левой символ строка подвергается какой-то обработке, после чего начинает форми-
роваться следующая строка. Отметим, что этот код имеет один недостаток: если
символу конца файла не предшествует символ перевода строки, то последняя стро-
ка оказывается без завершающего нулевого символа и остается необработанной.
Нетрудно придумать дополнение кода, которое ликвидировало бы этот недостаток.

Функцию get() удобно использовать для поиска в файле какого-то ключевого
символа. Например, цикл поиска в файле символа «$» можно организовать следу-
ющим образом:

while((c = infile.get()) != EOF)
if(с == '$') break;

if (с =='$') ...

Другой вариант функции-элемента get с символьным аргументом вводит очеред-
ной символ из входного потока (даже, если это символ разделитель) и сохраняет его в
символьном аргументе. Этот вариант функции get возвращает ложь, когда встречает-
ся признак конца файла; в остальных случаях этот вариант функции get возвращает
ссылку на тот объект потока, для которого вызывалась функция-элемент get.

При использовании этого варианта функции get приведенные ранее примеры
можно оставить практически без изменений, переписав только заголовки структур
while: