Předchozí [Datová pole (arrays)]

Doteď jsme se zabývali jednoduchými datovými typy, případně jejich sloučením do datového pole. Poznali jsme celočíselné proměnné, proměnné držící desetinné číslo, char (pro písmena) a void.

Jazyk C (na rozdíl od mnoha jiných programovacích jazyků) nenabízí automaticky typ string. Ale poněvadž už umíme pracovat s datovými poli, aneb poli, která slučují data stejného typu, pak si s chybějícím textovým řetězcem hravě poradíme. Vždyť text není nic jiného než uskupení písmenek - v Céčku tedy datové pole držící náš text ve formě jednotlivých písmenek.

Konec textového řetězce značí v Céčku tzv. null-byte, ‘\0’.

Následuje ukázka toho, jak by mohl takový řetězec v kódu vypadat:

char text1[5] = { 'A', 'h', 'o', 'j', '\0' };
char text2[5] = "Ahoj";     // compiler nam na konec automaticky da '\0'
char text3[] = "Ahoj";      // i zde lze vynechat velikost pole - je znama pres pocet prvku

Nyní už jsme schopní si od uživatele vyžádat i jeho jméno. Zkuste nyní použít funkci fgets(); potřebné informace k ní najdete přes man fgets (v příkazovém řádku).

#include <stdio.h>

#define MAX 15

int main(void)
{
    char jmeno[MAX];

    printf("Jmeno: ");
    fgets(jmeno, MAX, stdin);

    printf("Zadane jmeno: %s", jmeno);

    return 0;
} 

Maximální délku jména jsem limitovala na 15. Toto číslo jsem definovala jako konstantu (celkem nahoře pomocí #define MAX 15).

Pokud byste se chtěli podívat, co se nachází na jednotlivých místech proměnné “jmeno”, pak si je můžete nechat vytisknout opět pomocí smyčky. Ideálně jako čísla, abyste viděli i netisknutelné znaky. Překlad mezi čísly a znaky pak najdete v ASCII tabulce.

#include <stdio.h>

#define MAX 15

int main(void)
{
    char jmeno[MAX];

    printf("Jmeno: ");
    fgets(jmeno, MAX, stdin);

    printf("Zadane jmeno: %s", jmeno);

    printf("Znaky v poli 'jmeno': \n");

    for (int znak = 0; znak < MAX; znak++)
    {
        printf("%d ", jmeno[znak]);
    }
    printf("\n");

    return 0;
} 

(Odkaz na GitHub)

Všimněte si, že ať už zadáte jakékoli jméno, končí novým řádkem (\n, nebo 10) a null bytem (0). Cokoli potom jsou nedefinované hodnoty, hodnoty, které v paměti už byly.

Kam dál?

TBD. Příště ti ukážu, jak můžeš programu při spuštění přidat argumenty přes příkazový řádek.