@DATABASE CXX-Tutor.guide
@SMARTWRAP
@TAB 4

@node Main "IO Funktioner"

	@{b}Simpel input / output med data strømme.@{ub}

	I C++ kan man definere input og output som data strømme.
En input strøm indeholder for eksempel data om tastatur anslag eller en fil, som man kan flytte over i variabler efterhånden som man får brug for dem.
En output strøm indeholder data som brugeren vil have til for eksempel et vindue eller en fil; man fylder data på strømmen efterhånden som man har brug for det, og det vil herefter blive skrevet til en fil, vindue eller noget helt tredje (som i en bruger defineret data strøm).
Man bruger shift operatore til at dirigere data til og fra strømmene, sædvanligvis cout og cin (standard output og standard input), som altid er til rådighed for brugeren hvis iostream.h er inkluderet. Lad os tage et eksempel:

@{CODE}
@{I}@{U}Eksempel : @{UU}@{UI}
cout << "Hej verden" << endl;
  ^           ^          ^
Data strøm    |       Mere data
             Data
@{BODY}

	Betyder flyt dataene "Hej verden" (nul afsluttet char*) og endl (konstant for slut på linie) til cout strømmen.
Læg mærke til hvilken vej 'pilene' vender, nemlig ind imod strømmen, da dataene skal ind i strømmen.

@{CODE}
@{I}@{U}Eksempel : @{UU}@{UI}
char* c;
c = new char[80];
cin >> c;
delete c;
@{BODY}

	Betyder flyt dataene fra keyboard buffer ind i c. Læg igen mærke til 'pilene' som denne gang vender væk fra strømmen, da dataene skal ud af strømmen og ind i hukommelses området.


	@{b}Formateret input / output@{ub}

	cin,cout og data strømme i det hele taget, giver en hurtig måde at hente og bringe data på.
Men desvære har man ikke styr på hvordan det kommer til at se ud, eksempelvis hvor mange decimaler der skrives.
Her kan man bruge printf() og scanf().
Begge indeholder en formaterings streng, som beskriver hvordan dataene fremstilles / indlæses.

@{CODE}
@{U}@{I}Eksempel : @{UU}@{UI}
int	a=10,b=20;
printf("A=%d B=%d \\n",a,b);
@{BODY}

	Betyder : Skriv A= (efterfulgt af et tal / %d) og B= (efterfulgt af et tal / %d) og giv et linieskift (\\n).
	En såkaldt konverterings specifikation (conversion specification) indledes med et procent tegn,
og slutter med et konverterings tegn.
Imellem procent tegnet og konverterings tegnet må der være :


@{I}A @{UI})
Et minus tegn der indikerer venstre justering i det konverterede resultat.


@{I}B @{UI})
En decimal streng, som specificerer den minimale antal karakterer i resultatet.
Hvis resultatet har færre karakterer end det ønskede, vil der blive suppleret med mellemrum,
medmindre at decimal strengen startede med et nul, hvor der så vil blive suppleret med nuller.


@{I}C @{UI})
Et punktum efterfulgt af en decimal streng, som specificerer hvor mange af decimalerne, efter punktumet, der skal skrives.
I tilfælde af at der var tale om en float / double eller lignende.


Følgende koder er til rådighed :

%c	: Char / single character

%d	: decimal.

%e  : Scientific.[-]m.nnnnnnE[+][-]xx.

%f	: Float. [-]mmm.nnnnn

%g	: Brug %e eller %f, alt efter hvilken er kortest. Overflødige nuller skrives ikke.

%o	: Oktal

%s  : Streng (char* ). Series of chars until a zero is encontered.

%u  : Unsigned decimal

%x  : Hexadecimal, unsigned


	Hvis karakteren efter % ikke er en af de ovenstående, udskrives den.
Derfor udskrives % ved at skrive %%.

@endnode
