Unos i prikaz podataka

  • U C-u ne postoje posebne naredbe za ulaz/izlaz podataka.
  • Postoji skup bibliotečkih funkcija za učitavanje podataka u program i za upis rezultata na standardni izlaz ili u datoteku  ( scanf  i  printf ).
  • Deklaracije funkcija za upravljanje ulaznim/izlaznim resursima u C-u nalaze se u fajlu stdio.h
  • Pre korišćenja funkcija za ulaz/izlaz podataka u fajl sa izvornim kodom treba uključiti fajl stdio.h
  • Za uključivanje jednog fajla u drugi koristi se pretprocesorska direktiva include

Format include direktive:

1
  #include <ime_fajla>    ili    #include "ime_fajla"

Konkretno, kad god se u programu koriste funkcije scanf ili printf, treba navesti:

1
 #include <stdio.h>

 

scanf() - Funkcija za učitavanje podataka sa standardnog ulaza

Poziva se na sledeći način:

scanf(<format>,<adr_ul_podatka1> [,<adr_ul_podatka2>]…)

gde je:

<format> - Znakovni niz koji predstavlja definiciju konverzija koje treba izvršiti pri unosu podataka.

  • Svi ulazni podaci se učitavaju kao niz ASCII kodova.
  • Format definiše kako će se taj znakovni niz konvertovati u podatke odgovarajućeg tipa.
  • Svaka pojedinačna konverzija u ovom znakovnom nizu:

- počinje znakom %    i

- završava se slovom koje označava vrstu konverzije.

& - adresni operator

&a – adresa promenljive a

Format pojedinačne ulazne konverzije:

%[w][h|l|L]<tip_konverzije>

Tip konverzije može biti:

d – decimalna konverzija (rezultat je tipa int),

u – decimalna konverzija neoznačenih brojeva (rezultat je tipa unsigned int),

o – oktalna konverzija (rezultat je tipa int),

x – heksadekadna konverzija (rezultat je tipa int),

i – decimalna, oktalna ili heksadekadna konverzija zavisno od zapisa pročitanog broja (rezultat je tipa int),

f – konverzija brojeva zapisanih u fiksnom zarezu u podatke tipa float,

e – konv. brojeva zapisanih u eksponencijalnom obliku u podatke tipa float,

g – konv. koja označava da se ulazni znakovni niz konvertuje u podatak tipa float, bez obzira da li je na ulazu broj zapisan u fiknom zarezu ili u eksponencijalnom obliku,

c – znakovna konverzija (rezultat je tipa char),

s – konverzija u znakovni niz (niz znakova između dva bela znaka što znači da učitani niz ne sadrži bele znake. Iza pročitanih znakova dodaje se ‘\0’)

Značenja prefiksa

w – ceo broj koji označava dozvoljeni broj znakova za podatak u ulaznom nizu.

h – prefiks koji se koristi ispred celobrojnih konverzija i označava da se vrši konverzija ulaznog znakovnog niza u kratki ceo broj (rezultat je tipa short int),

l – prefiks koji se koristi ispred celobrojnih i realnih tipova konverzija i označava da se vrši konverzija ulaznog znakovnog niza u dugi ceo broj, ili u realni broja u dvostrukoj tačnosti (rezultat je tipa long int ili double),

L – prefiks koji se koristi samo ispred realnih tipova konverzija koji označava da se vrši konvertovanje ulaznog znakovnog niza u podatak tipa long double.

Primeri:

1
2
3
4
5
 int a;
 unsigned b;
 float x, y;
 long double z;
 scanf("%d%u%f%e%Lf", &a, &b, &x, &y, &z);

 

printf() - Funkcija za prikaz rezultata na standardni izlaz

Poziva se na sledeći način:

printf(<format>[,<izraz1>][,<izraz>]…)

gde je:

<format> - Znakovni niz koji predstavlja definiciju konverzija koje treba izvršiti pri prikazu rezultata.

  • U ovom slučaju, vrši se konvertovanje memorijskog zapisa podataka u izlazne znakovne nizove.
  • Osim pojedinačnih konverzija, format može sadržati i dodatne komentare koji će pojasniti izlazne rezultate ili uticati na preglednost prikazanih rezultata.

Format pojedinačne izlazne konverzije:

%[-][+| ][#][w[.d]][h|l|L]<tip_konverzije>

gde prefiksi imaju sledeća značenja:

-     označava da će se, ukoliko je dužina podatka manja od širine polja koje je predviđeno za prikaz podatka, vršiti poravnanje uz levu ivicu (po default-u vrši se desno poravnanje).

+    može da stoji isključivo ispred numeričkih konverzija i označava da će i ispred pozitivnih brojeva stajati njihov znak (+).

«blanko» - stoji takođe ispred numeričkih konverzija i označava da će se pri prikazu pozitivnih brojeva, na poziciji predviđenoj za znak broja pojaviti «blanko» znak.

#   stoji ispred celobrojnih konverzija (o ili x) i označava da će se uz vrednost broja prikazati i oznaka brojnog sistema koji se koristi za prikaz (tj. ako se koristi o konverzija, broj ce početi nulom, a ako se koristi heksadekadna konverzija, broj će početi sa 0x).

w – ceo broj koji predstavlja širinu polja koje će se koristiti za prikaz podatka.

d – ceo broj koji ispred realnih podataka predstavlja broj cifara iza decimalne tačke, a ispred znakovnih nizova predstavlja maksimalni broj karaktera koji će biti ispisani.

h, l, i L – imaju isto značenje kao i kod ulazne konverzije.

w – ceo broj koji predstavlja širinu polja koje će se koristiti za prikaz podatka.

d – ceo broj koji ispred realnih podataka predstavlja broj cifara iza decimalne tačke, a ispred znakovnih nizova predstavlja maksimalni broj koji će biti ispisani.

h, l, i L – imaju isto značenje kao i kod ulazne konverzije.

Primer:

1
2
3
4
5
6
int a;
unsigned b;
float x, y;
long double z;
                ...
printf("a=%-5d, b=%-3u\nx=%-8.4f, y=%-+15.7e\n z=%Lf", a, b, x, y, z);
Last modified: Thursday, 22 February 2018, 10:43 AM