Задача этой книги дать краткое и четкое изложение языка С++ в соответствии со стандар том iso/iec 14882. Она предназначена для студентов, изучающих язык «с нуля»



Download 2 Mb.
bet55/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   51   52   53   54   55   56   57   58   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

Функции ввода/вывода


Ââîä/âûâîä â C++ ðåaëèçóåòñя ëèáî ñ ïîìîùüþ ôóíêöèé, óíañëåäîâaííûõ îò áèá- ëèîòåêè C, ëèáî ñ ïîìîùüþ ïîòîêîâ C++. Cìåøèâaòü ýòè äâa ñïîñîáa â îäíîé ïðî- ãðaììå ìîæíî òîëüêî ñèíõðîíèçèðîâaâ ââîä ñ ïîìîùüþ ôóíêöèè synC_with_stdiO(). Êaæäûé ñïîñîá èìååò ñâîè ïðåèìóùåñòâa. Ïðåèìóùåñòâî èñïîëüçîâaíèя ïîòî- êîâ â òîì, ÷òî îíè ëåã÷å â èñïîëüçîâaíèè â ïðîñòûõ ñëó÷aяõ ââîäa/âûâîäa, íå òðåáóþùèõ ôîðìaòèðîâaíèя, a, ãëaâíîå, ïîòîêîâûå îïåðaöèè ìîæíî ïåðåîïðåäå- ëèòü äëя ñîáñòâåííûõ êëaññîâ. Ââîä/âûâîä â ñòèëå C óäîáíåå èñïîëüçîâaòü ïðè ôîðìaòèðîâaííîì âûâîäå â ïðîãðaììaõ, íå èñïîëüçóþùèõ îáúåêòíî-îðèåíòèðî- âaííóþ òåõíèêó. Êðîìå òîãî, ñóùåñòâóþò ìèëëèîíû ñòðîê, íaïèñaííûõ ía C è ïåðåíåñåííûõ ía C++, ñ êîòîðûìè ïðîãðaììèñòó ïðèõîäèòñя ñòaëêèâaòüñя. Ïî- òîêè C++ ðaññìaòðèâaþòñя â ðaçäåëå «Ïîòîêîâûå êëaññû», ñ. 265.
Äëя èñïîëüçîâaíèя ôóíêöèé ââîäa/âûâîäa â ñòèëå C íåîáõîäèìî ïîäêëþ÷èòü ê ïðîãðaììå çaãîëîâî÷íûé ôaéë èëè . Ïðè ââîäå/âûâîäå äaííûå ðaññìaòðèâaþòñя êaê ïîòîê áaéòîâ. Ôèçè÷åñêè ïîòîê ïðåäñòaâëяåò ñîáîé ôaéë èëè óñòðîéñòâî, íaïðèìåð, êëaâèaòóðó èëè äèñïëåé, ðaññìaòðèâaþùèåñя êaê ÷a- ñòíûé ñëó÷aé ôaéëa.
Открытие потока

Ðaáîòa ñ ïîòîêîì ía÷èíaåòñя ñ åãî îònðûòèя. Ïîòîê ìîæíî îòêðûòü äëя ÷òåíèя è/èëè çaïèñè â äâîè÷íîì èëè òåêñòîâîì ðåæèìå. Ôóíêöèя îòêðûòèя ïîòîêa èìååò ôîðìaò:
FILE* fOpen(COnst Char* filename, COnst Char* mOde);
Ïðè óñïåøíîì îòêðûòèè ïîòîêa ôóíêöèя âîçâðaùaåò óêaçaòåëü ía ïðåäîïðåäå- ëåííóþ ñòðóêòóðó òèïa FILE, ñîäåðæaùóþ âñþ íåîáõîäèìóþ äëя ðaáîòû ñ ïîòî- êîì èíôîðìaöèþ, èëè NULL â ïðîòèâíîì ñëó÷aå. Ïåðâûé ïaðaìåòð — èìя îòêðû- âaåìîãî ôaéëa â âèäå C-ñòðîêè, âòîðîé — ðåæèì îòêðûòèя ôaéëa:
"r" — ôaéë îòêðûâaåòñя äëя ÷òåíèя;
"w" — îòêðûâaåòñя ïóñòîé ôaéë äëя çaïèñè (åñëè ôaéë ñóùåñòâóåò, îí ñòèðaåòñя);

"a" — ôaéë îòêðûâaåòñя äëя äîáaâëåíèя èíôîðìaöèè â åãî êîíåö;


"r+" — ôaéë îòêðûâaåòñя äëя ÷òåíèя è çaïèñè (ôaéë äîëæåí ñóùåñòâîâaòü);
"w+" — îòêðûâaåòñя ïóñòîé ôaéë äëя ÷òåíèя è çaïèñè (åñëè ôaéë ñóùåñòâóåò, îí ñòèðaåòñя);
"a+" — ôaéë îòêðûâaåòñя äëя ÷òåíèя è äîáaâëåíèя èíôîðìaöèè â åãî êîíåö. Ðåæèì îòêðûòèя ìîæåò òaêæå ñîäåðæaòü ñèìâîëû t (òåêñòîâûé ðåæèì) èëè b
(äâîè÷íûé ðåæèì), îòëè÷aþùèåñя îáðaáîòêîé ñèìâîëîâ ïåðåõîäa ía íîâóþ ñòðîêó. Ïî óìîë÷aíèþ ôaéë îòêðûâaåòñя â òåêñòîâîì ðåæèìå, ïðè êîòîðîì êîì- áèíaöèя ñèìâîëîâ «âîçâðaò êaðåòêè» è «ïåðåâîä ñòðîêè» (0x13 0x10) ïðè ââîäå ïðåîáðaçóþòñя â îäèíî÷íûé ñèìâîë ïåðåâîäa ñòðîêè (ïðè âûâîäå âûïîëíяåòñя îáðaòíîå ïðåîáðaçîâaíèå).  äâîè÷íîì ðåæèìå ýòè ïðåîáðaçîâaíèя íå âûïîëíя- þòñя.
Ïðèìåð:
FILE *f = fOpen("d:\\Cpp\\data", "rb+");
Óêaçaòåëü f èñïîëüçóåòñя â äaëüíåéøèõ îïåðaöèяõ ñ ïîòîêîì. Åãî ïåðåäaþò ôóíêöèяì ââîäa/âûâîäa â êa÷åñòâå ïaðaìåòða.
Ïðè îòêðûòèè ïîòîêa ñ íèì ñâяçûâaåòñя îáëañòü ïaìяòè, íaçûâaåìaя áóôåðîì. Ïðè âûâîäå âñя èíôîðìaöèя íaïðaâëяåòñя â áóôåð è íaêaïëèâaåòñя òaì äî ça- ïîëíåíèя áóôåða èëè äî çaêðûòèя ïîòîêa. ×òåíèå îñóùåñòâëяåòñя áëîêaìè, ðaâ- íûìè ðaçìåðó áóôåða, è äaííûå ÷èòaþòñя èç áóôåða. Áóôåðèçaöèя ïîçâîëяåò áîëåå áûñòðî è ýôôåêòèâíî îáìåíèâaòüñя èíôîðìaöèåé ñ âíåøíèìè óñòðîéñòâa- ìè. Cëåäóåò èìåòü â âèäó, ÷òî ïðè aâaðèéíîì çaâåðøåíèè ïðîãðaììû âûõîäíîé áóôåð ìîæåò áûòü íå âûãðóæåí, è âîçìîæía ïîòåðя äaííûõ. C ïîìîùüþ ôóíê- öèé setbuf è setvbuf ìîæíî óïðaâëяòü ðaçìåðaìè è íaëè÷èåì áóôåðîâ.
Cóùåñòâóåò ïяòü ïðåäîïðåäåëåííûõ ïîòîêîâ, êîòîðûå îòêðûâaþòñя â ía÷aëå ða- áîòû ïðîãðaììû: ñòaíäaðòíûé ââîä stdin, ñòaíäaðòíûé âûâîä stdOut, ñòaíäaðò- íûé âûâîä ñîîáùåíèé îá îøèáêaõ stderr, ñòaíäaðòíûé äîïîëíèòåëüíûé ïîòîê stdaux è ñòaíäaðòíaя ïå÷aòü stdprn. Ïåðâûå òðè ïîòîêa ïî óìîë÷aíèþ îòíîñяòñя ê êîíñîëè. Ýòè óêaçaòåëè ìîæíî èñïîëüçîâaòü â ëþáîé ôóíêöèè ââîäa/âûâîäa òaì, ãäå òðåáóåòñя óêaçaòåëü ïîòîêa.
Ввод/вывод в поток

Ââîä/âûâîä â ïîòîê ìîæíî îñóùåñòâëяòü ðaçëè÷íûìè ñïîñîáaìè: â âèäå ïîñëå- äîâaòåëüíîñòè áaéòîâ, â âèäå ñèìâîëîâ è ñòðîê èëè ñ èñïîëüçîâaíèåì ôîðìaò- íûõ ïðåîáðaçîâaíèé. Äëя êaæäîãî âèäa îïåðaöèé îïðåäåëåí ñâîé íaáîð ôóíê- öèé.
Îïåðaöèè ââîäa/âûâîäa âûïîëíяþòñя ía÷èíaя ñ òåêóùåé ïîçèöèè ïîòîêa, îïðå- äåëяåìîé ïîëîæåíèåì ónaçaòåëя ïîòîna. Óêaçaòåëü óñòaíaâëèâaåòñя ïðè îòêðû- òèè ía ía÷aëî èëè êîíåö ôaéëa (â ñîîòâåòñòâèè ñ ðåæèìîì îòêðûòèя) è èçìåíя- åòñя aâòîìaòè÷åñêè ïîñëå êaæäîé îïåðaöèè ââîäa/âûâîäa. Òåêóùåå ïîëîæåíèå óêaçaòåëя ìîæíî ïîëó÷èòü ñ ïîìîùüþ ôóíêöèé ftell è fgetpOs è çaäaòü яâíûì îáðaçîì ñ ïîìîùüþ ôóíêöèé fseek è fsetpOs. Ýòè ôóíêöèè íåëüçя èñïîëüçîâaòü äëя ñòaíäaðòíûõ ïîòîêîâ. Íèæå ïåðå÷èñëåíû îñíîâíûå ôóíêöèè ââîäa/âûâîäa ïîòîêa.



  • ×òåíèå è çaïèñü ïîòîêa áaéòîâ âûïîëíяþò ôóíêöèè fread è fwrite.

  • ×òåíèå ñèìâîëa èç ïîòîêa getC, fgetC, èç ñòaíäaðòíîãî ïîòîêa stdin

getChar.

  • Çaïèñü ñèìâîëa â ïîòîê putC, fputC, â ñòaíäaðòíûé ïîòîê stdOut putChar.

  • ×òåíèå ñòðîêè èç ïîòîêa fgets, èç ñòaíäaðòíîãî ïîòîêa stdin gets.

  • Çaïèñü ñòðîêè â ïîòîê fputs, â ñòaíäaðòíûé ïîòîê stdOut puts.

  • Ôîðìaòèðîâaííûé ââîä èç ïîòîêa fsCanf, èç ñòaíäaðòíîãî ïîòîêa stdin

sCanf, èç ñòðîêè — ssCanf.

  • Ôîðìaòèðîâaííûé âûâîä â ïîòîê fprintf, â ñòaíäaðòíûé ïîòîê stdOut

printf, â ñòðîêó — sprintf.
Закрытие потока

Ïîòîê çaêðûâaåòñя ëèáî ïðè çaâåðøåíèè ïðîãðaììû, ëèáî яâíûì îáðaçîì ñ ïî- ìîùüþ ôóíêöèè fClOse:
int fClOse(FILE*);
Ïåðåä çaêðûòèåì ïîòîêa èíôîðìaöèя èç ñâяçaííûõ ñ íèì áóôåðîâ âûãðóæaåòñя ía äèñê. Ðåêîìåíäóåòñя âñåãäa яâíûì îáðaçîì çaêðûâaòü ïîòîêè, îòêðûòûå äëя çaïèñè, ÷òîáû èçáåæaòü ïîòåðè äaííûõ.
Обработка ошибок

Ôóíêöèè ðaáîòû ñ ïîòîêîì âîçâðaùaþò çía÷åíèя, êîòîðûå ðåêîìåíäóåòñя aía- ëèçèðîâaòü â ïðîãðaììå è îáðaáaòûâaòü îøèáî÷íûå ñèòóaöèè, âîçíèêaþùèå, ía- ïðèìåð, ïðè îòêðûòèè ñóùåñòâóþùèõ ôaéëîâ èëè ÷òåíèè èç ïîòîêa. Ïðè ðaáîòå ñ ôaéëaìè ÷añòî èñïîëüçóþòñя ôóíêöèè feOf è ferrOr:
int feOf(FILE*) âîçâðaùaåò íå ðaâíîå íóëþ çía÷åíèå, åñëè äîñòèãíóò êîíåö ôaéëa, â ïðîòèâíîì ñëó÷aå 0;
int ferrOr(FILE*) âîçâðaùaåò íå ðaâíîå íóëþ çía÷åíèå, åñëè îáíaðóæåía îøèáêa ââîäa/âûâîäa, â ïðîòèâíîì ñëó÷aå 0.


Пример работы с потоками

Äîïóñòèì, ÷òî â ôaéëå õðaíяòñя ñâåäåíèя î ìîíèòîðaõ.  êaæäîé ñòðîêå óêaçaí òèï, îïòîâaя è ðîçíè÷íaя öåíû è ïðèìå÷aíèå. Äëя ïðîñòîòû äaííûå â êaæäîé ñòðîêå çaïèñaíû åäèíîîáðaçíî: ïåðâûå 20 ñèìâîëîâ çaíèìaåò òèï ìîíèòîða, äa- ëåå ïî 5 ñèìâîëîâ öåëûå ÷èñëa, ïðåäñòaâëяþùèå îïòîâóþ è ðîçíè÷íóþ öåíû, ça- òåì ïðèìå÷aíèå äëèíîé íå áîëåå 40 ñèìâîëîâ.
Ïðèâåäåííaя íèæå ïðîãðaììa ïîñòðî÷íî ñ÷èòûâaåò äaííûå èç òåêñòîâîãî ôaéëa â áóôåðíóþ ïåðåìåííóþ s, çaòåì ôîðìèðóåò èç íèõ ñòðóêòóðó mOn è çaïèñûâaåò åå â äâîè÷íîì ðåæèìå â âûõîäíîé ôaéë. Äaëåå èëëþñòðèðóåòñя ñ÷èòûâaíèå èç ýòîãî ôaéëa ïðîèçâîëüíîé çaïèñè.
inClude inClude inClude inClude int main(){

FILE *fi, *fO;


if((fi = fOpen("d:\\C\\file.txt", "r")) == 0){
COut << "Îøèáêa îòêðûòèя âõîäíîãî ôaéëa"; return 1;} if((fO = fOpen("d:\\C\\binfile.Out", "w+b")) == 0){
COut << "Îøèáêa îòêðûòèя âûõîäíîãî ôaéëa"; return 1;} COnst int dl = 80;
Char s[dl]; struCt{
Char type[20]; int Opt, rOzn; Char COmm[40];
}mOn;
int kOl = 0; // Êîëè÷åñòâî çaïèñåé â ôaéëå while (fgets(s, dl, fi)){
// Ïðåîáðaçîâaíèå ñòðîêè â ñòðóêòóðó:
strnCpy(mOn.type, s, 19); // Îïèñaíèå strnCpy ñì. â ïðèëîzåíèè 6 mOn.type[19]='\0';
mOn.Opt = atOi(&s[20]); // Îïèñaíèå atOi ñì. â ñëåä. ðaçäåëå mOn.rOzn = atOi(&s[25]);
strnCpy(mOn.COmm, &s[30], 40); fwrite(&mOn, sizeOf mOn, 1, fO); kOl++;
}
fClOse(fi);
int i; Cin >> i; // Íîìåð çaïèñè
if (i >= kOl){COut << "Çaïèñü íå ñóùåñòâóåò"; return 1;}
// Óñòaíîâêa óêaçaòåëя òåêóùåé ïîçèöèè ôaéëa ía çaïèñü i: fseek(fO, (sizeOf mOn)*i, SEEK_SET);
fread(&mOn, sizeOf mOn, 1, fO);
COut << "mOn.type " << mOn.type << " Opt " << mOn.Opt
<< " rOzn " << mOn.rOzn << endl; fClOse(fO);
return 0;
}

Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   51   52   53   54   55   56   57   58   ...   232




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