Hlavní strana -> Programování v C -> 02. Datové typy, čtení z klávesnice

02. Datové typy, čtení z klávesnice

Ahoj, jsem tu opět. V tomhle díle si povíme něco o datových typech a čtení hodnot z klávesnice do proměnných. Počítač totiž vznikl od počítání a jediné co tedy umí, je sčítat, odčítat, násobit ... No a toho musíme my jakožto uživatelé využít. Jazyk C má pět základních datových typů, které jsou:

Typ char slouží k uchovávání znaků z ASCII tabulky nebo malých čísel. Jeho šířka je 8 bitů (1B). Co to jsou bity a byty (bajty) doufám všichni víte a pokud náhodou ne, tak na žádost můžu vytvořit další stránku právě o tomhle.

int je celočíselný typ. Jeho šířka záleží na prostředí v jakém je použit, obvykle 16 nebo 32 bitů, ale ve windowsech 95 a výš (zatím) mají šířku 32 bitů (4B).

float uchovává hodnotu s pohyblivou řádovou čárkou (obsahuje desetinná místa) šířka 32 bitů.

double je typ jako float, jenomže zhruba s dvojnásobnou přesností. Šířka 64 bitů.

Pro typy char a int existují ještě dva modifikátory signed a unsigned. Znamená to se znaménkem nebo bez něj. Se znaménkem znamená, že nejvyšší bit je použit pro určení, zda je číslo záporné nebo kladné. Při použití unsigned dostaneme proměnnou s možností uchovat si dvojnásobnou hodnotu plus 1. Signed je většinou nadbytečný protože překladač používá standardně signed. Do signed char se vejdou čísla -128 až 127 a do unsigned char 0 až 255.

Pro typ int existují ještě další dva modifikátory short a long. Není předem jasné, jak široké budou proměnné typu int a proto se užívají short int (16 bitů) a long int (32 bitů). Je dobré tyto modifikátory používat pokud byste chtěl zajistit přenositelnost do jiných prostředí. Pro vlastní potřebu si musíte nejdříve zjistit v jakém prostředí děláte a potom už nemusíte tyto modifikátory využívat, ale je to přinejmenším užitečné.

Tak, datové typy máme za sebou a teď ještě budeme potřebovat proměnné, se kterými bude náš budoucí program pracovat. Aby uměl sečíst dvě čísla, která zadáme, tak pro ně musíme vytvořit proměnnou, do které se tato hodnota uloží. Proměnné se vytvářejí takto:

char ch;    /* vytvoří znakovou proměnnou ch */
int i,j;    /* vytvoří dvě celočíselné proměnné i a j */
float f;    /* proměnná s pohyblivou řádovou čárkou f */
double df;  /* proměnná df typu double */

Ještě taková malá odbočka. Možná se ptáte co znamenají ta lomítka s hvězdičkami a mezi nimi text, který jistě nepatří do zdrojového kódu. Prostředí ve kterém pracuji (Dev C++ v.4) označí komentáře modrou kurzívou a je tedy dobře poznat, že se jedná o komentář a ne o část kódu. Tento komentář má platnost od začátku /* až po konec určený */. Někdy se takovému komentáři říká víceřádkový. Pak ještě existuje jednořádkový komentář, ale ten patří do C++. Kdybych jej tady někdy použil, pak je to omyl a stačí nahradit Céčkovským. S použitím jednořádkových komentářů by předchozí příklad vypadal takto:

char ch;    /* vytvoří znakovou proměnnou ch */
int i,j;    /* vytvoří dvě celočíselné proměnné i a j */
float f;    /* proměnná s pohyblivou řádovou čárkou f */
double df;  /* proměnná df typu double */

Komentář může být dlouhý, jak chcete třeba i celou stránku a text označený jako komentář překladač ignoruje. Komentáře proto mají dvě hlavní opodstatnění: za prvé pomáhají vysvětlit chod programu člověku, který se snaží pochopit jeho funkci no a za druhé umožňují dočasné vyřazení určité části programu bez nutnosti ji mazat a později zase připisovat. Tak a teď zase k věci. Máme vytvořeny proměnné, ale potřebujeme je mít k něčemu, tudíž chceme do nich ukládat hodnoty a s těmi potom pracovat. Dám tady jednoduchý program.

#include <stdio.h>

void main(void)
{
    int a,b,c;

    a = 5;
    b = 3;
    c = a + b;

    printf("Promenna c ma hodnotu %d.\n",c);
    printf("Soucet a, b je roven %d.", a + b);
}

Tento program vytvoří 3 celočíselné proměnné typu int, poté a-čku přiřadí 5, b-čku 3 a potom vypíše na obrazovku Promenna c ma hodnotu 8. a na druhý řádek napíše Soucet a, b je roven 8. Tady jsem vám ukázal, že pro výpis hodnoty na obrazovku není zapotřebí vytvářet další proměnnou, ale stačí do argumentu funkce printf napsat co se s čím má udělat.

Trochu rozepíšu tu funkci printf. Takže, do uvozovek se píše řetězec, který se potom objeví na obrazovce, v místě, kde je %d se vypíše celočíselná hodnota příslušného argumentu za uvozovkou, čili hodnota proměnné c. Znaky \n znamenají, že se má přejít na další řádek, kdyby to tam totiž nebylo, tak by výpis řetězců pokračoval na tom samém řádku. Potom je uvozovka, označující konec řetězce za ní musí být čárka a za čárkou jsou hodnoty, které chceme vypsat v místě, kde se objevilo %d. Další možnosti zápisu printf:

printf("Vypis tri cisel %d %d %d.\n", b,c,a);
printf("Vypis hodnot primo %d %d %d.", 21,8,0);

Tyto dva příkazy printf vypíšou:
Vypis tri cisel 3 8 5.
Vypis hodnot primo 21 8 0.
Doufám, že je vám to zatím jasné a pokud ne, tak mi napište e-mail a já se to pokusím trochu více rozepsat a vysvětlit.

No to by nám ale program při každém spuštění vypisoval pořád to samé a byl by neužitečný. Proto sem dáme další funkce pro čtení hodnot z klávesnice. Budeme používat funkci scanf, která je hodně podobná svému protějšku printf. Pokud bychom chtěli upravit předchozí program tak, aby nám umožnil sčítat libovolná čísla, museli bychom jej přepsat nějak takhle.

#inlcude <stdio.h>

void main(void)
{
    int a, b;

    printf("Zadejte dve cela cisla.");

    scanf("%d%d", &a, &b);

    printf("\nJejich soucet je %d.", a+b);
}

Jak si můžete všimnout, jsou si funkce printf a scanf velmi podobné. Do uvozovek dáme typy, jaké bude program číst (o typech v printf a scanf se budeme bavit až v některém dalším díle) a za ukončovací uvozovku a čárku patří jména proměnných, do kterých chceme načtené hodnoty uložit uvozené znakem &. Tento znak je používán k tomu, aby vracel adresu proměnné o tom a o ukazatelích se však budeme bavit až za dlouho.

Nakonec jsem byl přinucen dát sem ještě takové rozšíření. Je nutné, pokud chcete zadat hodnotu s bohyblivou řádovou čárkou, aby se na tento rozdělovník celočíselné a destetinné části nezapomnělo. Jelikož C není český programovací jakzyk, tak se používá desetinná tečka. Pokud tedy chceme zadat do proměnné s pohyblivou řádovou čárkou celočíselnou hodnotu, nesmíme zapomenout napsat tečku a nulu. Nejlépe to pochopíte na příkladu:

float pohybliva = 10.231;
float f = 21.0; /* zdani celeho cisla do pohyblive carky */
double dbl = 1.0;

A to je pro tento díl vše, protože v nejlepším se má přestat. Že JO? :-)

02. - Rozšíření dílu o datových typech

Zpět

Programování v C | CZ 175/477 | Mapa stránek
Bc. Petr Klimánek, student Ostravské univerzity v Ostravě