39,40 -> Unos i ispis podataka (7.02, 14.02)
.... u pripremi ....
Programi koje ovde pravimo pisani su za konzolu. Konzola je jedan poseban računarski program koji je deo operativnog sistema preko koga je moguće vršiti komunikaciju sa programom ili operativnim sistemom bez grafičkog korisničkog interfejsa. Preko konzole se komunikacija vrši samo korišćenjem tastature, i ona obuhvata ispis nekog teksta koji se prikazuje korisniku ili unos nekog teksta od strane korisnika programa.
Ulaz i izlaz u programskom jeziku C
Pomoću ulaznih funkcija program dobija podatke neophodne za rešavanje zadatka, a pomoću izlaznih funkcija program prikazuje rezultate. Najčešća ulazna i izlazna funkcija koje se koriste su printf() i scanf(). Ove dve funkcije nisu standardni deo C-a, već se nalaze u posebnoj biblioteci stdio.h. Upravo zbog toga, svaki naš program koji sadrži printf i scanf funkciju mora pre svega da uključi ovu biblioteku na početku programa naredbom:
#include <stdio.h>
Funkcija printf() se koristi za ispis na konzolu i funkcija scanf() se koristi za učitavanje sa konzole.
*******************************
Funkcija printf()
Funkcija printf() služi za prikazivanje teksta i vrednosti na monitor (tačnije na konzolu).
Izlazna funkcija printf() prikazuje na ekranu ono što se nalazi unutar zagrade. Ukoliko želimo da prikažemo neki tekst, stavljamo ga pod navodnicima, a ukoliko želimo da prikažemo neku promenljivu moramo najpre da označimo mesto gde će se ona ispisati specifikatorom konverzije. Sve ovo mnogo je lakše naučiti na primerima:
printf("Pozdrav svima!"); /* rezultat ove naredbe je ispis Pozdrav svima! na
ekranu. */
Funkciji smo kao argument u zagradi predali tekst između navodnika i on će biti ispisan na ekran.
Unutar navodnika pored teksta možemo uneti i neke specijalne karaktere, poput \n za prelazak u novi red ili \t za tab. Tako na primer naredba:
printf(“Pozdrav svima!\tKako ste?\nZdravo!”);
ispisuje:
Pozdrav svima! Kako ste? Zdravo!
Sa TABOM između “Pozdrav svima!” i “Kako ste?” i sa “Zdravo!” u novom redu.
Ukoliko želimo da se na ekranu ispiše promenljiva min koja ima celobrojnu vrednost recimo 10 (min=10), to možemo uraditi na sledeći način:
printf("Minimum je %d.",min);
- rezultat će biti :
Minimum je 10.
%d je u ovom primeru specifikator konverzije, odnosno mesto gde će se umetnuti vrednost promenljive iza zareza, to jest promenljive min. Ukoliko recimo imamo dve promeljive, min i max, koje imaju vrednost min=10 i max=100, rezultat možemo prikazati na sledeći način:
printf("Minumum je %d, a maksimum je %d.",min,max);
- ispis izgleda ovako:
Minimum je 10 a maksimum 100.
%d osim što obeležava mesto, govori i da će se tu prikazati neka celobrojna vrednost. U slučaju da se radi o realnoj vrednosti tipa float, pisaćemo %f, a karakter char obeležavamo sa %c. Takođe, ukoliko neku realnu promenljivu želimo da prikažemo na 2 decimale, pisaćemo %.2f.
*******************************
Znači, treba da zapamtite da:
printf() služi za formatiran prikaz teksta na ekran, što znači da koristeći ovu funkciju možete vršiti tabulaciju( horizontalnu i verikalnu), prelaziti u novi red i dr. Sve se ovo postiže korišćenjem komandnih sekvanci.
Dole, posle opisa funkcije scanf(), data je tabela komandnih sekvenci i kako se koriste,
dok je na kraju data i tabela upravljačkih znakova (koriste se za prikazivanje vrednosti promenljivih)
**************************
Funkcija scanf()
U slučaju ulaza, to jest unosa vrednosti, koristimo funkciju scanf(). U zagradi pišemo najpre način kako ćemo nešto uneti, pomoću specifikatora konverzije (%d, %f, %c – kao i kod printf()), a potom adrese promenljivih. Adrese promenljivih se označavaju tako što se ispred promenljivih upiše operator &. Na primer, ukoliko želimo da unesemo jednu celobrojnu vrednost i upišemo je u promenljivu x to ćemo pisati ovako:
scanf("%d",&x);
Ukoliko želimo da unesemo dve realne promenljive i upišemo ih u x i y pišemo:
scanf("%f %f",&x,&y);
U poslednjem primeru “%f %f” označava da možemo da unesemo dve vrednosti sa razmakom između njih i potom da stisnemo enter i obe vrednosti će se uneti u x i y. Čak i ako unesemo jednu promenljivu pa stisnemo enter, program će čekati da unesemo i drugu promenljivu i opet da stisnemo enter.
Operator & je unarni operator i označava adresu promenljive pored koje stoji.
&x – adresa promenljive x.
*********************************
Komandna sekvenca se sastoji od znaka „beksleš“( \ ) i jos nekog dodatnog znaka,
-------------------------------------------------------------------
| K . S | OPIS |
-------------------------------------------------------------------
| \n | New line (prelazak u novi red) |
-------------------------------------------------------------------
| \t | Horizontalna tabulacija( HT) |
-------------------------------------------------------------------
| \v | Vertikalna tabulacija( VT) |
-------------------------------------------------------------------
| K . S | OPIS |
-------------------------------------------------------------------
| \b | Backspace( vraca jedno mesto nazad |
-------------------------------------------------------------------
| \r | Vraca na pocetak reda |
-------------------------------------------------------------------
| \a | Alarm( beep zvuk) |
-------------------------------------------------------------------
| \’ | Prikazuje na ekran simbol ’ |
-------------------------------------------------------------------
| \“ | Prikazuje na ekran simbol “ |
-------------------------------------------------------------------
| \? | Prikazuje na ekran simbol ? |
-------------------------------------------------------------------
| \\ | Prikazuje na ekran simbol \ |
-------------------------------------------------------------------
| \o Oktal no| Prikazivanje ceo broj oktalno |
-------------------------------------------------------------------
| \x Xheksa | Prikazivanje ceo broj heksadecimalno |
-------------------------------------------------------------------
Objasnimo najkorisnije sekvence:
Ako želite da pređete u novi red, kuca ćete sekvencu \n unutar teksta koji se predaje kao parametar funkciji printf(), ovako:
printf(“Prvi red\nDrugi red \n\n\nSesti red...“);
Možete izvršiti na sličan način i tabulaciju:
printf(“Pocetak\tpa razmak\n Pa novi red...\n“);
Razlog što morate kucati beksleš da biste odštampali navodnike i gornji zarez, a i sam beksleš ćete i sami uvideti ako malo razmislite. Recimo ako hoćete da prikažete neki tekst pod navodnicima na ekran, a ako ne koristite beksleš na određenom mestu, dobili biste grešku prilikom kompajliranja.
printf(“ovo “nece“ raditi...“);
Pogledajte prosleđeni argument. On zapravo nije string (tekst) već se sastoji od stringa “ovo “, nedefinisane reči – nece, i još jednog stringa “ raditi...“. Da li smo to hteli? Ispravna forma ovoga ce izgledati ovako:
printf(“ovo \“nece\“ raditi...“);
Ovim ćemo i mi i kompajler biti zadovoljni. Provežbajte ove naredbe pa krenite dalje sa učenjem.
Ovo prikazivanje teksta na ekran je jednostavno uraditi ali stvari postaju komplikovanije ako hoćemo da prikažemo i vrednosti nekih promenljivih.
Sintaksa funkcije printf je sledeća:
printf( upravljacki_niz_znakova, parametar1,prarametar2,parametarN )
Objasnićemo na sledećem primeru:
/* PROGRAM printf1 */
#include <stdio.h>
void main(void)
{
int A = 10;
float B = -789.4612;
printf("Vrednost A je %d, dok je vrednost B %f \n", A, B);
}
Vidljivo je da smo sada funkciji predali više argumenata, ukupno 3. Unutar upravljačkog niza se nalaze između ostalog i upravljački znaci, %d i %f.
Ovi znaci „govore“ funkciji da na njihovom mestu treba da se nađe vrednost neke promenljive, a koja je to promenljiva navodimo kao dodatni argument, u ovom slučaju to su promenljive A i B. Dakle, upravljački znaci su slični komandnim sekvencama, s tom razlikom što komandne sekvence služe za formatiranje teksta, a upravljački znaci za prikazivanje vrednosti promenljivih.
Verovatno ste se zapitali zašto smo za prikazivanje vrednosti promenljive A koristili upravljački znak %d, a za za prikazivanje vrednosti promenljive B %f. Razlog je taj što se ove promenljive razlikuju u tipu( A je tipa int dok je B float) a za svaki tip promenljive postoje različiti upravljački znaci, kao što je slučaj i sa komandnim sekvencama. Evo tabele:
------------------------------------------------------------------------------
| U. Z | Opis |
------------------------------------------------------------------------------
| %c | Za tip podatka CHAR |
------------------------------------------------------------------------------
| %d, %i | Za tip podatka INT |
------------------------------------------------------------------------------
| %f | Za tip podatka FLOAT |
------------------------------------------------------------------------------
| %lf | Za tip podatka DOUBLE |
------------------------------------------------------------------------------
| %e | Prikazuje broj u eksponencionalnom obliku |
------------------------------------------------------------------------------