Читање и печатење на податоци

Повеќето програми кои ги разгледавме досега извршуваа наредби за комуникација со корисникот. Во ова предавање ќе покажеме како, со помош на стандардните потоци cin (за читање од тастатура) и cout (за печатење на екран), програмата може од корисникот да бара податоци, да чита податоци или да печати резултати. Овие потоци (cin и cout) се дефинирани во датотеката iostream.

Стандарден излез (cout)

C++ користи потоци (анг. stream) за читање (влез) и запишување (излез) на податоци од стандардни медиуми (датотеки, тастатура, екран, итн). Потоците овозможуваат вметнување/запишување (<<) или извлекување/читање (>>) на податоци.

Веќе разгледавме неколку програми кои го користат стандардниот cout поток и печатат податоци на екран. Да се обидеме сега, преку пример, да објасниме како се користи cout:

Програма 1
 
 
#include <iostream>
using namespace std;
 
int main()
{
int x = 100;
cout << "Otpecati neshto!" << endl; //Otpecati neshto!
cout << x << endl; //100
cout << 500 << endl; //500
cout << "Edno," << "dve" << "," << "tri" << endl; //Edno,dve,tri
cout << "Moze i kombinacija " << "od tekst i promenlivi - " << x << endl;
//Moze i kombinacija od tekst i promenlivi - 100
cout << "Bez endl ";
cout << "se se pecati";
cout << " vo eden red!";
cout << endl;
//Bez endl se se pecati vo eden red!
cout << "Ova e vekje nov red." << endl << "i nov!" << endl << "i nov!";
//Ova e vekje nov red.
//i nov!
//i nov!
cout << endl << endl << endl << "Kraj na programata!";
return 0;
}

Прво нешто што треба да го забележите е вклучувањето на "<iostream>" и користењето на стандардниот (std) простор на имиња. Не ги заборавајте овие две линии.

Во C++, печатењето се врши преку вметнување (со помош на операторот <<) на податоци во cout потокот. Може да се вметнуваат променливи (со што се печати нивната вредност) или какви било други податоци (цели броеви, реални броеви, знаци, текст, итн.). Кога печатиме текст, потребно е истиот да го ставиме во наводници "tekst koj treba da se pechati".

Следно, забележете дека операторот за вметнување (<<) може да се искористи повеќе пати во една иста наредба. Можно е и да се комбинираат променливи, константи и други податоци во една иста наредба (линија 14).

Забележете ја и употребата на endl манипулаторот - тој вметнува знак за нова линија во потокот. Вметнувањето на константи (броеви, текст) и променливи во потокот, по правило, не предизвикуваат печатење на податоци во повеќе линии (без разлика колку cout наредби имаме). Програмерот мора експлицитно да внесе знак за нова линија доколку сака да печати податоци во повеќе линии.

Во некој од претходните пасуси наведовме дека е потребно секој текст кој сакаме да го отпечатиме да го ставиме во наводници: "tekst koj treba da se pechati". Но, што доколку сакаме во потокот да внесеме знак за наводници? Во таквите случаи, потребно е пред знакот за наводници (кој сакаме да го отпечатиме) да го ставиме знакот '\' (коса црта). Овој знак му кажува на компајлерот дека она што следува после него е специјален знак кој треба да се протолкува соодветно. \" ќе се протолкува од компајлерот како знак за наводници. Други изрази имаат друго значење: најпознат пример е изразот \n (коса црта, па n) – кој ќе се протолкува како знак за нова линија (слично како endl). Разгледајте ја следната програма (и нејзиниот излез):

Програма 2
 
 
#include <iostream>
using namespace std;
 
int main()
{
cout << "prva linija\n"; //prva linija
cout << "vtora linija\ntreta linija"; //vtora linija
//treta linija
cout << endl;
cout << " \"Ova e vo navodnici\"" << endl; //"Ova e vo navodnici"
cout << "Ime: \"OSTU Gostivar\", Gostivar" << endl; //Ime: "OSTU Gostivar", Gostivar
return 0;
}

Во вашите програми може да користите и endl и \n за вметнување на знак за нова линија.

Стандарден влез (cin)

Читање на податоци од стандарден влез (тастатура) се прави со помош на операторот за извлекување (>>). Програмата ќе ги прочита податоците и ќе ги смести во променливата која сте ја навеле во наредбата за читање. Да разгледаме пример:

Програма 3
 
 
#include <iostream>
using namespace std;
 
int main()
{
int a, b;
cout << "Vnesi dva broja: ";
cin >> a;
cin >> b;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
int c, d;
cout << "Vnesi ushte dva broja: ";
cin >> c >> d;
cout << "c = " << c << endl;
cout << "d = " << d << endl;
double real;
cout << "Vnesi eden decimalen broj: ";
cin >> real;
cout << "real = " << real;
return 0;
}

Забележете дека читањето се прави преку извлекување (>>) на податоци од cin потокот. За разлика од читањето, печатењето го правиме преку вметнување (<<) на податоци во cout потокот.

Со една иста наредба може да прочитаме вредности за повеќе променливи – слично како кај печатењето. Во примерот даден погоре, вредностите на променливите c и d се читаат со употреба на една наредба. Доколку ја извршите оваа програма дома, запаметете да притиснете ENTER (RETURN) по внесување на податоците - без тоа системот нема да знае кога сте завршиле со внесување на соодветниот ред од податоци. Податоците може да ги одделувате со празно место, со tab или со знак за нов ред. Податоците не мора да се внесат во еден ист ред, дури и кога користите една cin наредба за внесување на повеќе податоци.

Мора да се внимава на типот на податок кој и го предаваме на програмата: ако сме дефинирале (со cin наредба) дека корисникот, во тој дел од програмата, ќе внесе податок кој е цел број, тогаш тој мора да внесе податок кој е цел број - во спротивно, програмата нема да се изврши успешно. Ова нема да има никаков ефект на останатите ваши програми или оперативниот систем, па не плашете се - голем број од програмите кои што ќе ги типкате ќе завршуваат неуспешно.

Постои начин на кој може да се врши валидација (проверка) на она што го внесува корисникот - преку читање на текст и негова проверка. Доколку текстот не одговара на барањата, може да побараме од корисникот повторно да го внесе потребниот податок. За ова ќе зборуваме во некое друго предавање.