tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi
ero taulukkoon taulukossa alkiot samantyyppisiä tietueessa alkiot voivat olla erityyppisiä tiedot kuitenkin yhteen kuuluvia ohjelmoinnin perusteet, c-kieli 2
henkilötiedot tietue nimi ikä osoite puhelinnumero kaikki tiedot yhden muuttujan arvoiksi ohjelmoinnin perusteet, c-kieli 3
tietuetyyppi tietuetyypin määrittely toteutetaan struct rakenteella struct henkilo_tiedot { char nimi[30]; int ika; char osoite[50]; char puh[15]; }; ohjelmoinnin perusteet, c-kieli 4
tietueen kentät edellisessä esimerkissä nimi, ika, osoite ja puh ovat kenttiä kenttien määrittely tehdään kuten tavallisten muuttujien määrittely ohjelmoinnin perusteet, c-kieli 5
tietuemuuttuja edellä määriteltyä rakennetta noudattava tietuemuuttuja voidaan määritellä seuraavasti: struct henkilo_tiedot henkilo; määrittely nimeää tietuemuuttujan henkilö ja varaa muistista tilaa jokaista tietueen kenttää varten ohjelmoinnin perusteet, c-kieli 6
tietueen kentän käyttöönotto tietuetyyppisen muuttujan kenttiin viitataan pisteoperaattorilla henkilo muuttujan nimikentän täyttäminen: gets(hehnkilo.nimi); tai scanf( %s, henkilo.nimi); ohjelmoinnin perusteet, c-kieli 7
nuolioperaattori kenttien käytössä tietueeseen osoittavia osoitinmuuttujia käytetään, kun tietue halutaan välittää funktiolle (muuttujaparametrina) tietuetyyppi kantatyyppinä: struct henkilo_tiedot *henkilo_ptr; osoitinmuuttujan osoittaman tietueen kenttiin viitataan nuolioperaattorilla: printf( %s,henkilo_ptr->nimi); ohjelmoinnin perusteet, c-kieli 8
/* esimerkki tietueen käytöstä*/ #include<stdio.h> #include<conio.h> /*VAKIOT*/ #define MAX_KIRJAN_NIMI 30 #define MAX_KIRJAILIJAN_NIMI 30 /*TIETOTYYPIT*/ struct kirja { char nimi[max_kirjan_nimi+1]; char kirjailija[max_kirjailijan_nimi+1]; float hinta; }; /* PÄÄOHJELMA JATKUU*/ printf( Anna kirjailijan nimi: ); gets(book.kirjailija); printf( Anna kirjan hinta: ); scanf( %d,&book.hinta); clrscr(); printf( Annoit seuraavat tiedot:\n\n ); printf( %-30s %-30s Hinta\n, Kirjan nimi, Kirjoittaja ); printf( \n%-30s %-30s %6.2f\n, book.nimi,book.kirjailija,book.hinta); } /*PÄÄOHJELMA*/ void main(void) { struct kirja book; clrscr(); printf( Anna kirjan nimi: ); gets(book.nimi); ohjelmoinnin perusteet, c-kieli 9
tietueet taulukkoon jos edellisen esimerkin mukaan halutaan koota kirjatietoja yhteen tehdään tietuetaulukko: struct kirja book[10]; taulukon alkioihin, tietueisiin, viitataan indeksin avulla: lainakirja = book[7];/*lainakirja samaa tyyppiä kuin alkio*/ ohjelmoinnin perusteet, c-kieli 10
tietueet taulukkoon (jatk.) taulukon alkiolle voidaan lukea tietoa: gets(book[i].nimi); kenttiin viitataan siis indeksin ja pisteoperaattorin avulla ohjelmoinnin perusteet, c-kieli 11
tietue / taulukko tietue voidaan sijoittaa toisen samantyyppisen tietueen arvoksi taulukkoa ei voida sijoittaa samoin, koska taulukon nimi on taulukon osoite merkkijono : strcpy(mjono1,mjono2); ohjelmoinnin perusteet, c-kieli 12
tietue parametrina funktiolle tietue voidaan välittää joko muuttuja- tai arvoparametrina tietue voi olla funktion paluuarvona (taulukko välitetään funktiolle muuttujaparametrina, funktio ei voi palauttaa taulukkoa) tietueen osoitteeseen viitataan & parametrilla muuttujaparametrina välitettäessä, parempi vaihtoehto kaikkia kenttiä ei kopioida aliohjelmalle ohjelmoinnin perusteet, c-kieli 13
tietueitten vertailu vertailu on tehtävä kenttä kerrallaan merkkijonojen strcmp() funktio käyttöön, jos tietueen kenttä on merkkijono ohjelmoinnin perusteet, c-kieli 14
typedef synonyymi itse määritellylle tietotyypille käyttäen typedef -määrittelyä yksinkertaistaa tietuemuuttujien määrittelyä struct kortti{ char maa[7]; int arvo; }; /*määrittelyt voidaan myös liittää yhteen*/ typedef struct kortti{ char maa[7]; int arvo; }Kortti; typedef struct kortti Kortti; */Kortti tietuetyyppisen muuttujan määrittely*/ /*Kortti määritelyt tarkoittamaan Kortti pelikortti; struct kortti tietuetyyppiä*/ ohjelmoinnin perusteet, c-kieli 15