Prikaz jedne poruke
Stara 13.8.2006, 0:59   #158
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: objasnjenja pocetniku

Mali komentar o ovom poslednjem kodu. ANDROSS nećeš zameriti ali ovde smo da učimo zar ne

Definicija
Kod:
char ime[21];
rezerviše niz od 21 elemenata u koji se smešta tzv. "char" tip podataka. Char tip podataka nije ništa drugo nego obično slovo. Znači, ukoliko se u niz smesti recimo ime "Misa" onda bi element ime[0] sadržao slovo "M", element ime[1] bi sadržao slovo "i" i tako dalje. Ovde ide jedna veoma važna napomena a to je da su u C-u i C++-u nizovi tzv. "zero-based" tipa odnosno brojanje elemenata počinje od 0 a ne od 1. To znači da se prvi element niza "odaziva" na “ime[0]” a poslednji na “ime[20]” a ne “ime[21]” što bi kompajler prijavio kao grešku.

Ovde sledi i objašnjenje toga šta je to "null terminator"

ANDROSS-ov program u suštini radi jednu veoma jednostavnu stvar. Pita korisnika za ime koje korisnik unosi nakon čega ispisuje uneto ime. Kako se to radi. Jednostavno. Pratimo ANDROSS-ov kod.

Prva linija programa
Kod:
char ime[21];
rezerviše već pomenuti niz od 21 elemenata za skladištenje imena.
Drugi red
Kod:
std::cout << "Kako se zoves? " << std::endl;
ispisuje na ekranu poruku "Kako se zoves?".
Deo koda
Kod:
std::cin.get(ime, 21);
očekuje da korisnik unese ime i pri tome se ignoriše sve duže od 21 karaktera nakon čega treba pritisnuti ENTER.

Deo koda
Kod:
 std::cout << "Tvoje ime je: " << ime << std::endl;
ispisuje uneto ime.

Ovde na scenu stupa problem sa tzv. "null terminatorom". Naime, u C-u i C++-u svi string-ovi na kraju moraju da imaju tzv. "null-terminator" koji označava kraj stringa. On se označava sa "\0". Kako se često stringovi unose preko tastature a poslednji taster pri unosu je ENTER treba ispred tog terminatora dodati još jedno mesto za "novi red" koji se označava sa "\n". Znači ako ovde ukucate recimo ime "Misa" vaš string za upis će imati dužinu od 6 a ne 4 karaktera! O ovome treba voditi računa a posebno u složenijim slučajevima.
Da ovde ne bi bilo zabune "\n" ima dužinu od jednog karaktera jer pripada grupi specijalnih karaktera koji se označavaju sa početnim "\" u imenu. Postoji puno specijalnih karaktera kao što su: "\a" - beep (aktivira beeper računar i čuje se zvuk, veoma interesantno ), "\b" - backspace, "\t" - vertikalni tabulator, "\v" - horizontalni tabulator, "\"" (ide obrnuta kosa crta pa navodnik) - navodnik itd.

Enter na kraju za posledicu u ovom slučaju ima jednu gadnu manu a to je da automatski (pošto je “ENTER” poslednji bufferovan sa tastature pa zbog brzine izvršenja programa par tih buffer-ovanih ENTER-a "iscuri") okida bilo kakav "std::cin.get();" koji bi se našao eventualno na kraju koda ispred “return” komande. Opet govorim o onima koji ne koriste MSVC++ Dakle za one koji koriste full C++ kompatibilne kompajlere treba primeniti malo izmenjen kod.

Poslednja ispravka: holodoc (13.8.2006 u 1:38)
holodoc je offline   Odgovor sa citatom ove poruke