Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


веденнЯ/виведеннЯ з використаннЯм рґзних класґв




Ћтже, ми визначили, що потоковґ класи - це постачальники ґнструментґв длЯ роботи з файлами. “ потокових класах зберґгаютьсЯ:

- структури, що забезпечують вґдкриттЯ/закриттЯ файлґв;

- функцґ» (методи) вґдкриттЯ/закриттЯ файлґв;

- ґншґ функцґ» ґ данґ, що забезпечують, Як ми побачимо далґ, власне ввґд/вивґд.

Ростґр ґмен

Ѓагато серйозних додаткґв складаютьсЯ з декґлькох програмних файлґв (з вихґдним текстом програм), Якґ створюютьсЯ ґ обслуговуютьсЯ окремими групами програмґстґв. § тґльки пґслЯ цього всґ файли збираютьсЯ в загальний проект. Ђле Як бути з тим фактом, що в таких файлах можуть бути однаково оголошенґ рґзнґ змґннґ? “ ‘++ це незручнґсть дозволЯ№тьсЯ за допомогою так званих просторґв ґмен, що вводЯтьсЯ в кожен текстовий програмний файл проекту за допомогою директиви:

Namespace <ґХмЯ_простору_ґмен (ґдентифґкатор)> { ‚ цґ дужки вставлЯ№тьсЯ весь програмний текст}

Љоли йде збґрка загального проекту, то в пґдсумковому текстґ пишуть директиву:

using namespace:: <ґдентифґкатор_простору_имен>;

–е забезпечу№ в пґдсумковому проектґ доступ до змґнних файлу з даними простору ґмен. Џри використаннґ потокових класґв мови ‘++ в основнґй програмґ потрґбно писати директиву:

using namespace::std;

‚ ґншому випадку програма не пройде компґлЯцґю. “ лґстингу 8 наводитьсЯ приклад використаннЯ директив простору ґмен.

Ґстинг 8

#include <vcl.h>

#include <iostream>

#include <conio.h>

namespace F {

float x = 9;

}

namespace G {

using namespace F; /* тут сам простґр G використову№ простґр F, ґ в ньому ж оголошу№тьсЯ ще один простґр: INNER_G */

float y = 2.0;

namespace INNER_G {

float z = 10.01;

}

} // G

int main() {

using namespace G; /* цЯ директива дозволЯ№ користуватисЯ всґм, оголошеним у просторґ G */

using namespace G::INNER_G; /* цЯ директива дозволЯ№ користуватисЯ всґм, оголошеним тґльки в INNER_G */

float x = 19.1; // локальне оголошеннЯ перевизнача№ попередн№

std::cout << "x = " << x << std::endl;

std::cout << "y = " << y << std::endl; // y беретьсЯ ґз простору F

std::cout << "z = " << z << std::endl; /* z беретьсЯ ґз простору INNER_G */

getch();

return 0;

}

‚ результатґ на екранґ зХЯвитьсЯ:

x = 19.1

y = 2

z = 10.01

std::cout С це стандартний вивґд. ‰ого ми розглЯнемо далґ. ’ут показано, що об'№кт cout належить простору ґмен std.

Обота з класом fstream

—лени цього класу дозволЯють вґдкрити файл, записати в нього данґ, перемґстити вказґвник позицґонуваннЯ в файлґ (вказґвник, Який показу№, на Якому мґсцґ у файлґ ми знаходимосЯ) в те чи ґнше мґсце, прочитати данґ.

–ей клас ма№ наступнґ основнґ функцґ» (методи):

- open () - вґдкрива№ файл;

- close () - закрива№ файл;

- is_open () - Якщо файл вґдкритий, то поверта№ true, ґнакше - false;

- rdbuf () - вида№ вказґвник на буфер введеннЯ/виведеннЯ.

”ормат функцґ» open ():

open (char * file_name, open_mode);

де file_name - ґм'Я файлу, open_mode - спосґб вґдкриттЯ файлу.

‘посґб вґдкриттЯ файлу зада№тьсЯ значеннЯм перечислимого змґнно»:

enum open_mode {app, binary, in, out, trunc, ate};

–Я змґнна визначена в базовому класґ ios, тому зверненнЯ до перечислимого значеннЯм в класґ fstream, з примґрником Якого ми працю№мо, повинно йти ґз зазначеннЯм класу-батька: ios:: app, ios:: binary ґ т. д.

ЏризначеннЯ способґв вґдкриттЯ файлу:

- app - вґдкрити файл длЯ дозапису в його кґнець;

- binary - вґдкрити файл у бґнарному виглЯдґ (такґ файли були записанґ по певнґй структурґ даних ґ тому повиннґ читатисЯ по цґй же структурґ);

- in - вґдкрити файл длЯ читаннЯ;

- out - вґдкрити файл длЯ запису в його початок. џкщо файл не ґсну№, вґн буде створений;

- trunc - знищити вмґст файлу, Якщо файл ґсну№ (очистити файл);

- ate - встановити вказґвник позицґонуваннЯ файлу на його кґнець.

Џри завданнґ режимґв вґдкриттЯ файлу можна застосовувати оператор логґчного ЂЃЋ (||), щоб складати необхґдне по№днаннЯ режимґв вґдкриттЯ.

Ќаведемо приклад програми роботи з класом fstream (лґстинг 9).

ЏоЯсненнЯ до програми данґ по тексту. ђезультат роботи показаний на рис. 2.

Ґстинг 9

#include <vcl.h>

#include<fstream>

#include<iostream>

#include <conio.h>

#include <stdio.h>

void main() {

using namespace std; /* ‚икористову№тьсЯ стандартне простґр ґмен. ‘твореннЯ двонаправленого (читаннЯ-запис в одному ґ тому ж файлґ) об'№кта (екземплЯра) */

fstream inout;

inout.open ("fstream.out", ios_base:: in | ios_base:: out |

ios_base:: trunc);

// ‚ивґд в файл

inout << "This is the story1 of a man" << endl;

inout << "This is the story2 of a man" << endl;

inout << "This is the story3 of a man" << endl;

char p [100];

// “становка покажчика файлу (позицґонуваннЯ) в його початок inout.seekg (0);

// —итаннЯ 1-го рЯдка (довжиною не бґльше 100 символґв)

inout.getline (p, 100);

// ‚иведеннЯ 1-го рЯдка на екран (stdout)

cout << endl << "String1:" << endl;

cout << p;

// ‡апам'ЯтовуваннЯ поточно» позицґ» у файлґ пґслЯ 1-го виведеннЯ

fstream:: pos_type pos = inout.tellg ();

// —итаннЯ 2-го рЯдка з файлу

inout.getline (p, 100);

// ‚ивґд 2-го рЯдка на екран (stdout)

cout << endl << "String2:" << endl;

cout << p;

// —итаннЯ 3-го рЯдка з файлу

inout.getline (p, 100);

// ‚иведеннЯ 3-го рЯдка на екран (stdout)

cout << endl << "String3:" << endl;

cout << p;

// “становка вказґвника перед 2-м рЯдком

inout.seekp (pos);

// ‡апис на мґсце 2-го рЯдка

inout << "This is the story2 of a man" << endl;

// ‡апис на мґсце 3-го рЯдка

inout << "This is the story3 of a man" << endl;

// “становка на початок файлу

inout.seekg (0);

// ‚ивґд всього вмґсту потоку на екран (stdout)

cout << endl << endl << inout.rdbuf ();

inout.close ();

system ("DEL FSTREAM.OUT");

getch ();

}

ђис. 2. ђезультати роботи програми лґстинга 9

Абота с классом ofstream

Љлас ofstream призначений длЯ органґзацґ» робґт з виведеннЯ (записи) у файл за допомогою методґв цього класу:

r open () - вґдкрива№ файл длЯ запису в нього ґнформацґ»;

r is_open () - поверта№ true, Якщо файл вґдкритий, ґ false - у протилежному випадку;

r put () - запису№ в файл один символ;

r write () - запису№ в файл задане число символґв;

r skeep () - перемґща№ покажчик позицґонуваннЯ в задане мґсце

файлу;

r tellp () - вида№ поточне значеннЯ покажчика позицґонуваннЯ;

r close () - закрива№ файл;

r rdbuf () - вида№ покажчик на буфер виводу (цей буфер знаходитьсЯ в структурґ, з Якою пов'Язу№тьсЯ файл при його вґдкриттґ).

“ лґстингу 10 приведений приклад використаннЯ класу ofstream.

‹ґстинг 10

ofstream FILE; /* оголошу№мо змґнну FILE типу ofstream

(‘творю№мо екземплЯр класу) */

FILE.open ("a.txt"); // виклика№мо метод вґдкриттЯ файлу

if (FILE == NULL) return (0); // невдале вґдкриттЯ файлу

for (int i = 0; i <2; i + +)

FILE << "string" << i << endl; // вивґд в файл

FILE.close (); // закриттЯ файлу

Обота з класом ifstream

Љлас ifstream призначений длЯ органґзацґ» робґт по введенню (читаннЯ) з файлу за допомогою методґв цього класу:

- open () - вґдкрива№ файл длЯ читаннЯ з нього ґнформацґ»;

- is_open () - поверта№ true, Якщо файл вґдкритий, ґ false - у протилежному випадку;

- get () - чита№ з файлу один символ;

- read () - чита№ з файлу задане число символґв;

- eof () - поверта№ ненульове значеннЯ, коли покажчик позицґонуваннЯ в файлґ досЯга№ кґнцЯ файлу;

- peek () - вида№ черговий символ потоку, але не вибира№ його (не зрушу№ покажчик позицґонуваннЯ даного в файлґ);

- seekg () - перемґща№ покажчик позицґонуваннЯ в задане мґсце

файлу;

- tellg () - вида№ поточне значеннЯ покажчика позицґонуваннЯ;

- close () - закрива№ файл;

- rdbuf () - вида№ покажчик на буфер введеннЯ (цей буфер знаходитьсЯ в структурґ, з Якою пов'Язу№тьсЯ файл при його вґдкриттґ).

Џриклад використаннЯ класу приведений в лґстингу 11.

‹ґстинг 11

ifstream FILE; /* оголошу№мо змґнну FILE типу ifstream (створю№мо екземплЯр класу) */

char p [100];

FILE.open ("a.txt"); // виклика№мо метод вґдкриттЯ файлу

if (FILE == NULL) return (0); // невдале вґдкриттЯ файлу

while (! FILE.eof ()) // перевґрка на ознаку кґнцЯ файлу {

FILE >> p; // читаннЯ з файлу

cout << p << endl; // вивґд прочитаних даних на екран

}

FILE.close (); // закриттЯ файлу

Ќаведемо програму роботи з файлами введеннЯ / виводу (лґстинг 12).

‹ґстинг 12

# Include <vcl.h>

# Include <iostream>

# Include <fstream>

# Include <conio.h>

# Define DelKey 's' / / цей символ буде вґддалЯтисЯ з потоку

# Define maxline 1000

// ------------------------------------------------ -------------------- # pragma argsused

int main (int argc, char * argv []) {

using namespace std; // використову№тьсЯ стандартне простґр ґмен

// Џеревґрка виведеннЯ

ofstream FILE;

FILE.open ("c: \\ a.txt", ios:: out);

char p [maxline];

int i, pos;

for (i = 0; i <2; i + +)

FILE << "string" << i; /* в даному випадку "<< endl" вводити не треба, ґнакше його потрґбно виводити, ґ цикл буде довший */

FILE.close ();

// Џеревґрка введеннЯ (читаннЯ по записах)

ifstream FILE1;

FILE1.open ("c: \ \ a.txt");

FILE1.seekg (0); /* перемґща№ покажчик у початок (при вґдкриттґ вґн ґ так буде на початку, але це просто длЯ демонстрацґ» роботи функцґ» seekg ()) */

if (FILE1 == NULL) / / перевґрка на помилку вґдкриттЯ файлу

return (0);

while (! FILE1.eof ()) // перевґрка кґнцЯ файлу {

FILE1 >> p >> i;

cout << p << i << endl;

}

FILE1.close ();

getch ();

// Џеревґрка посимвольного читаннЯ

ifstream FILE2;

char c;

FILE2.open ("c: \ \ a.txt");

if (FILE2 == NULL) // перевґрка на помилку вґдкриттЯ файлу

return (0);

while (! FILE2.eof ()) // перевґрка кґнцЯ файлу {

c = FILE2.peek (); /* буде лґчений наступний символ, але покажчик позицґонуваннЯ при цьому не зрушу№тьсЯ: залиша№тьсЯ на цьому символґ */

streampos cgp = FILE2.tellg (); /* визнача№тьсЯ поточна позицґЯ у файлґ */

if (c == DelKey) /* викидаютьсЯ всґ символи DelKey з читаного потоку */ {

pos = cgp + 1; // готу№мосЯ пропустити символ по seekg ()

FILE2.seekg (pos); /* пересунули покажчик позицґонуваннЯ на один символ далґ, щоб пропустити символ */

continue; // на продовженнЯ циклу

}

FILE2.get (c); // читаннЯ символу в с

cout << c;

} // While

cout << endl;

FILE2.close ();

getch ();

system ("DEL C: \ \ A.TXT"); // видаленнЯ робочого файлу

} // Main ()

Обота з бґнарним файлом

’акґ файли, на вґдмґну вґд потокових, створюютьсЯ в певнґй логґчнґй структурґ ґ тому повиннґ читатисЯ в змґнну тґ№» ж структури. Џриклад програми приведений в лґстингу 13.

лґстинг 13

# include <vcl.h>

# include <iostream> / / длЯ cin, cout

# include <fstream>

# include <conio.h>

# include <stdio.h>

void main () {

using namespace std; // використову№тьсЯ стандартне простґр ґмен

/* „анґ про спґвробґтникґв */

struct Blocknotes {

char name [30];

char phone [15];

int age;

} B [2] = {

"

}; // §нґцґалґзацґЯ масиву структур

// ‡апис даних в файл

ofstream FILE;

FILE.open ("Block", ios:: binary);

for (int i = 0; i <2; i++)

FILE.write ((char *) & b [i], sizeof (b [i]));

FILE.close ();

// —итаннЯ даних з файлу

ifstream FILE1;

FILE1.open ("Block", ios:: binary);

Blocknotes bb [2];

int i = 0;

while (! FILE1.eof ()) {

if (i == 2)

goto m;

FILE1.read ((char *) & bb [i], sizeof (bb [i]));

cout << "string" << i << "" << bb [i]. name << ""

<< Bb [i]. Phone << "" << bb [i]. Age << endl;

i++;

}

m:

FILE1.close ();

system ("DEL BLOCK");

getch ();

}

ЏоЯснень потребують такґ моменти:

- длЯ запису

FILE.write((char *)&b[i], sizeof(b[i]));

використову№тьсЯ функцґЯ буферґзґрованний виведеннЯ write (), в Якґй першим аргументом № вказґвник на структуру, з Яко» ми повиннґ записувати данґ. –ей вказґвник дорґвню№ адресою структури, тобто & b [i]. Ђле в потоцґ всґ данґ зберґгаютьсЯ побайтно, тому тип вказґвника char (тут йде примусове перетвореннЯ типу). „ругий аргумент - довжина запису. ‚она визнача№тьсЯ стандартною функцґ№ю sizeof ();

- за допомогою функцґ» system ("DEL BLOCK") вилуча№тьсЯ робочий файл;

- оператор goto застосований длЯ пґдстраховки вґд перевищеннЯ ґндексу масиву bb [].

ђезультат роботи програми наведений на рис. 3.

 

ђис. 3. ђезультат роботи програми лґстингу 13

‘тандартне введеннЯ/виведеннЯ в ‘++

‡агальнґ положенЯЯ

‘тандартне введеннЯ/виведеннЯ № окремим випадком файлового введеннЯ/виведеннЯ. Џри файловому введеннґ/виведеннґ ми оголошували екземплЯри вґдповґдних поточних класґв ґ потґм користувалисЯ методами ґ операцґЯми << ґ >>. Ђле Як ми бачили на початку цґ№» лекцґ», класи istream, ostream, що лежать в основґ потокових класґв, мґстЯть стандартнґ об'№кти-екземплЯри класґв з ґменами cout (екземплЯр класу длЯ стандартного введеннЯ), cin (екземплЯр класу длЯ стандартного виведеннЯ) ґ сerr (екземплЯр класу длЯ стандартного виводу повґдомлень про помилки). Џри запуску будь-Яко» програми на мовґ ‘++ цґ стандартнґ потоки визначенґ (вґдкритґ) ґ за замовчуваннЯм призначенґ на стандартне ввґдний пристрґй - клавґатуру (cin), на стандартне вивґдний пристрґй - екран (cout ґ cerr). Џричому всґ цґ пристро» синхронно пов'Язанґ з вґдповґдними вказґвниками stdin, stdout, stderr. ’ак що робота зґ стандартним введеннЯм/виведеннЯм зводитьсЯ до того, що замґсть ґмен примґрникґв вґдповґдних класґв, що задаютьсЯ користувачем, задаютьсЯ ґмена стандартних екземплЯрґв класґв: cin, cout. ‚ґдкривати нґчого не потрґбно, треба тґльки використовувати операцґ» <<, >> ґ операцґ» форматуваннЯ. џкщо ми пишемо ґмена змґнних, з Яких виводЯтьсЯ або в Якґ вводЯтьсЯ данґ, то за замовчуваннЯм длЯ введеннЯ/виведеннЯ використовуютьсЯ певнґ формати. Ќаприклад, запишемо:

cout << i;

“ цьому випадку значеннЯ i виведетьсЯ на екран у форматґ, визначеному за замовчуваннЯм длЯ типу i в мґнґмальному поле.

‡апишемо:

cin >> i >> j >> s;

де i, j, s описанґ вґдповґдно Як int, float, char. “ записґ ми не бачимо форматґв, але при введеннґ значень цих змґнних з клавґатури (пґслЯ введеннЯ кожного значеннЯ треба натискати клавґшу <Enter>)»х формати будуть врахованґ.

Тандартне виведеннЯ cout

Ћб'№кт cout направлЯ№ данґ в буфер-потґк, пов'Язаний з об'№ктом stdout, оголошеним у файлґ stdio.h. ‡а замовчуваннЯм стандартнґ потоки ‘ ґ ‘++ синхронґзованґ.

Џри виведеннґ данґ можуть бути вґдформатованґ за допомогою функцґй-членґв класу або манґпулЯторґв. Џерелґк»х наведено в табл. 4.

ЊанґпулЯтори, що починаютьсЯ з приставки "no" (noshowpos ґ т. п.) мають зворотню дґю по вґдношенню до манґпулЯторам з такими ж ґменами, але без "no". “ графґ "Ћпис" у таких манґпулЯторґв поставленґ прочерки.

’аблицЯ 4. ЊанґпулЯтори ґ функцґ» стандартного введеннЯ/виведеннЯ в ‘++

ЊанґпулЯтори ”ункцґ»-члени класу Ћпис
showpos setf (ios:: showpos) ‚ида№ знак плюс у виведених позитивних чисел
noshowpos unsetf (ios:: showpos) -
showbase setf (ios:: showbase) ‚ида№ базу системи численнЯ в виведеному числґ у виглЯдґ префґкса
noshowbase unsetf (ios:: showbase) -
uppercase setf (ios:: uppercase) ‡амґню№ символи нижнього регґстра на символи верхнього регґстру у вихґдному потоцґ
nouppercase unsetf (ios:: uppercase) -
showpoint setf (ios:: showpoint) ‘творю№ символ десЯтково» крапки в створеному потоцґ з плаваючою точкою (в виведеному числґ)
noshowpoint unsetf (ios:: showpoint) -
boolalpha setf (ios:: boolalpha) Џереклада№ булевий тип в символьний
noboolalpha unsetf (ios:: boolalpha) -
unitbuf setf (ios:: unitbuf) ‘кида№ буфер виводу пґслЯ кожно» операцґ» вивода
nounitbuf unsetf (ios:: unitbuf) -
internal setf (ios:: internal, ios:: adjustfield) „ода№ символи-заповнювачґ до певним внутрґшнґм позицґЯх вихґдного потоку (йдетьсЯ про виведеннЯ числа у виглЯдґ потоку символґв). џкщо такґ позицґ» не визначенґ, потґк не змґню№тьсЯ
left setf (ios:: left, ios:: adjustfield) „ода№ символи-заповнювачґ з кґнцЯ числа (зрушуючи число влґво)
right setf (ios:: right, ios:: adjustfield) „ода№ символи-заповнювачґ з початку числа (зрушуючи число вправо)
dec setf (ios:: dec, ios:: basefield) Џереклада№ базу вводЯтьсЯ або виводЯтьсЯ цґлих чисел у десЯткову (введенґ пґслЯ цього манґпулЯтора данґ будуть виводитисЯ Як десЯтковґ)
hex setf (ios:: hex, ios:: basefield) Џереклада№ базу вводЯтьсЯ або виводЯтьсЯ цґлих чисел в шґстнадцЯткову (введенґ пґслЯ цього манґпулЯтора данґ будуть виводитисЯ Як шґстнадцЯтковґ)
oct setf (ios:: oct, ios:: basefield) Џереклада№ базу вводЯтьсЯ або виводЯтьсЯ цґлих чисел у вґсґмкову (введенґ пґслЯ цього манґпулЯтора данґ будуть виводитисЯ Як вґсґмковґ)
fixed setf (ios:: fixed, ios:: floatfield) Џереклада№ вихґд з плаваючою крапкою в вихґд з фґксованою точкою
scientific setf (ios:: scientific, ios:: floatfield) ‚ида№ числа з плаваючою точкою у виглЯдґ, використовуваному в наукових цґлЯх: наприклад, число 23450000 буде записано Як: 23.45e6
  setbase (int base) Џеретворю№ введеннЯ цґлих чисел в тип base, де параметр base може бути одним з чисел 8, 10 або 16
fill (c) setfill (char_type c) ‡ада№ символ заповненнЯ при виведеннґ даних
precision (n) setprecision (int n) ‡ада№ точнґсть виведеннЯ даних (кґлькґсть цифр пґслЯ крапки)
setw (int n) width (n) ‡ада№ ширину полЯ длЯ виведених даних (кґлькґсть символґв)
endl   ‚ставлЯ№ символ нового рЯдка ('\n') у вихґдну послґдовнґсть символґв ґ скида№ буфер введеннЯ
ends   ‚ставлЯ№ символ '\0' в вихґдну послґдовнґсть символґв
flush flush () ‘кида№ буфер виведеннЯ ws ‡ада№ пропуск пробґлґв при введеннґ

‡наченнЯ за замовчуваннЯм:

- precision () - 6;

- width () - 0;

- fill () - пробґл.

Ќаведемо приклад програми ґз застосуваннЯм об'№кта cout (лґстинг 14).

“сґ поЯсненнЯ ви можете знайти в коментарЯх. ђезультат роботи програми представлений на рис. 4.

Ґстинг 14

// cout example

# Include <vcl.h>

# Include <iostream>

# Include <iomanip> // включеннЯ манґпулЯторґв

# Include <conio.h>

void main () {

using namespace std;

int i;

float f;

cout << "Enter i and f>" << endl;

// —итаннЯ цґлого числа ґ числа з плаваючою точкою з пристрою stdin

cin >> i >> f;

// ‚иведеннЯ цґлого ґ перехґд на новий рЯдок

cout << i << endl;

// ‚иведеннЯ числа з плаваючою точкою ґ перехґд на новий рЯдок

cout << f << endl;

// ‚иведеннЯ в шґстнадцЯтковґй системґ

cout << hex << i << endl;

// ‚иведеннЯ в вґсґмковґй ґ десЯткового системах

cout << oct << i << dec << i << endl;

// ‚иведеннЯ i з зазначеннЯм його знака

cout << showpos << i << endl;

// ‚иведеннЯ i в шґстнадцЯтковґй системґ

cout << setbase (16) << i << endl;

/* ‚иведеннЯ i в десЯтковґй системґ та доповненнЯ праворуч символом @ до ширини в 20 символґв (‡аповненнЯ почина№тьсЯ вґд право» межґ до лґво»). џкщо ви вводите 45, наприклад, то виведетьсЯ 45 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ */

cout << setfill ('@') << setw (20) << left << dec << i;

cout << endl;

// ‚иведеннЯ того ж результату в тому ж форматґ,

// Ђле з використаннЯм функцґй замґсть манґпулЯторґв

cout.fill ('@');

cout.width (20);

cout.setf (ios:: left, ios:: adjustfield);

cout.setf (ios:: dec, ios:: basefield);

cout << i << endl;

// ‚иведеннЯ f в науковґй нотацґ» з точнґстю - 10 цифр

cout << scientific << setprecision (10) << f << endl;

// ‡мґна точностґ до 6 цифр

cout.precision (6);

// ‚иведеннЯ f ґ поверненнЯ до нотацґ» з фґксованою точкою

cout << f << fixed << endl;

getch ();

}

ђис. 4. ђезультат работы программы листинга 14

Тандартне введеннЯ cin

Ћб'№кт (екземплЯр класу) cin управлЯ№ введеннЯм з буфера введеннЯ, пов'Язаного з об'№ктом stdin, оголошеним у файлґ stdio.h. ‡а замовчуваннЯм стандартнґ потоки в мовах ‘ ґ ‘++ синхронґзованґ. Џри введеннґ використову№тьсЯ частина тих функцґй ґ манґпулЯторґв, Якґ визначенґ длЯ cout. –е такґ манґпулЯтори, Як dec, hex, oct, ws та ґн.

Џриклад програми з використаннЯм об'№кта cin приведений в лґстингу 15.

Ґстинг 15

// Cin example # 1

# include <vcl.h>

# include <fstream>

# include <iostream>

# include <conio.h>

void main () {

using namespace std;

int i;

float f;

char c;

// ‚веденнЯ цґлого числа, числа з плаваючою точкою ґ символу з stdin

cout << "Enter i, f, c and then input the string>" << endl;

cin >> i >> f >> c;

// ‚ивґд i, f ґ c на stdout

cout << i << endl << f << endl << c << endl;

//

// Cin example # 2

//

char p [50];

// Ќаказ на видаленнЯ з введеннЯ всґх пробґлґв

cin >> ws >> p;

cout << p << endl;

// —итаннЯ символґв з stdin, поки не буде натиснута клавґша <Enter>

// Ђбо не будуть прочитанґ 49 символґв

cin.seekg (0);

cin.getline (p, 50);

// ‚иведеннЯ результату на stdout

cout << p << endl;

getch ();

}

ђезультат роботи програми наведено на рис. 5.

 

ђис. 5. ђезультат роботи програми лґстингу 15





Поделиться с друзьями:


Дата добавления: 2016-09-06; Мы поможем в написании ваших работ!; просмотров: 413 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент всегда отчаянный романтик! Хоть может сдать на двойку романтизм. © Эдуард А. Асадов
==> читать все изречения...

2395 - | 2153 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.