Alt linux Программирование на языке С++ в среде Qt Creator Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк, О. В. Чеснокова, А. С. Чмыхало Москва alt linux 2015



Download 5,27 Mb.
Pdf ko'rish
bet100/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   96   97   98   99   100   101   102   103   ...   193
Bog'liq
Book-qtC


Глава 7. Организация ввода-вывода в C++
Два числа в текстовом файле считаются разделёнными, если между ними
есть хотя бы один из символов: пробел, табуляция, символ конца строки.
Хорошо, если программисту заранее известно, сколько и каких значений хра-
нится в текстовом файле. Однако часто просто известен тип значений, храня-
щихся в файле, при этом количество значений в файле может быть различным.
При решении подобной проблемы необходимо считывать значения из файла по
одному, а перед каждым считыванием проверять, достигнут ли конец файла.
Для проверки, достигнут или нет конец файла, служит функция
F.eof();
Здесь F — имя потока, функция возвращает логическое значение: true — если
достигнут конец файла, если не достигнут функция возвращает значение false.
Следовательно, цикл для чтения содержимого всего файла можно записать
так.
while ( ! F . e o f ( ) ) //Организован цикл, условием окончания цикла
//является достижение конца файла, в этом случае F.eof() вернёт true.
{
F>>a ; //Чтение очередного значения из потока F в переменную a.
...
<обработка значения переменной a>
}
Рассмотрим следующую задачу.
Задача 7.2.
В текстовом файле abc.txt хранятся вещественные числа (рис. 7.2),
вывести их на экран и вычислить их количество.
Текст программы с комментариями приведён ниже.
#include 
#include 
using namespace s t d ;
i n t main ( )
{
i f s t r e a m f ; //Поток для чтения.
f l o a t a ; i n t n=0;
f . open ( " a b c . t x t " ) ; //Открываем файл в режиме чтения.
i f ( f ) //Если открытие файла прошло корректно, то
{
while ( ! f . e o f ( ) ) //Организован цикл, выполнение цикла
//прервётся, когда будет достигнут конца файла.
{
f >>a ; //Чтение очередного значения из потока f в переменную a.
cout<n++;
//Увеличение количества считанных чисел.
}
f . c l o s e ( ) ; //Закрытие потока.
cout<<" n = "<}
e l s e cout<<"Файл не найден"<//вывод сообщения, об отсутствии такого файла.
return 0 ;
}
Результат работы программы к задаче 7.2:
3.14159 2.789 -21.14 543.89 -90.1
n=5
Программа работает корректно, если текстовый файл abc.txt был создан с
помощью программы к задаче 7.1. Предположим, что файл создавался в тек-
Программирование на языке С++ в среде Qt Creator


7.2. Работа с текстовыми файлами в C++
235
стовом редакторе, и пользователь ввёл после последней цифры символ пробела,
табуляции или перехода на новую строку. Тогда результат будет таким:
3.14159 2.789 -21.14 543.89 -90.1 -90.1
n= 6
Происходит это потому, что после чтения последней цифры из потока ко-
нец файла не достигнут, оператор цикла выполняется ещё один раз, значение
переменной n увеличивается на единицу, а так как значение переменной a не из-
менилось, то выводится повторно. Один из способов решения данной проблемы
может быть таким:
while ( ! f . e o f ( ) )
{
f >>a ;
i f
( ! f . e o f ( ) ) //Проверяем, достигнут ли конец файла, если нет — печатаем значение a
{
cout<n++;
}
}
Если количество вещественных чисел, записанных в файл, известно заранее,
то текст программы можно переписать следующим образом:
#include 
#include 
using namespace s t d ;
i n t main ( )
{
i f s t r e a m f ;
f l o a t a ; i n t i , n=5;
f . open ( " a b c . t x t " ) ;
i f ( f )
{
f o r ( i =1; i <=n ; f >>a , cout<f . c l o s e ( ) ;
}
e l s e cout<<"Файл не найден"<return 0 ;
}
Существует возможность открывать файл с данными таким образом, чтобы
в него можно было дописывать информацию. Рассмотрим эту возможность на
примере решения следующей задачи.
Задача 7.3.
В файле abc.txt (рис. 7.2) хранится массив вещественных чисел,
дописать в файл этот же массив, упорядочив его по возрастанию.
Алгоритм решения задачи очень простой. Считываем в массив данные из
текстового файла, упорядочиваем массив, дописываем его в этот же файл.
Для чтения данных из файла описываем поток ifstream, открываем его в
режиме чтения и последовательно, пока не достигнем конца файла, считываем
все элементы в массив. Сортировку проведём методом пузырька. Обратите вни-
мание, что поток нужно открыть так, чтобы была возможность дописать в конец
файла упорядоченный массив.
Текст программы с комментариями приведён ниже.
#include 
#include 
using namespace s t d ;
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


236
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   96   97   98   99   100   101   102   103   ...   193




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish