Pripravte si jednoduchý program, ktorý načíta vyhľadávaný reťazec vypíše ho a skončí.

Zopakujte si

  • Správu vypisujeme pomocou funkcie printf()
  • Ak chceme použiť funkciu pre prácu s terminálom, musíme priložiť hlavičkový súbor <stdio.h>.
  • Ako prvá sa v programe automaticky vyvolá funkcia main().
  • Koniec riadka je vyznačený znakom \n.
  • Reťazec je pole znakov zakončené nulou.
  • Názov poľa je smerník na jeho začiatok.

Pripravte si pamäť

Vo funkcii main() si vytvorte pole, do ktorého uložíte načítaný riadok. Nezabudnite si pole inicializovať na nulu pomocou memset.

char line[LINE_SIZE];
memset(line,0,LINE_SIZE);

Výraz LINE_SIZE si definujte ako konštantu na začiatku súboru:

#define LINE_SIZE 100

Načítajte vyhľadávaný reťazec

Na načítanie reťazca použite funkciu fgets zo štandardnej knižnice. Na načítanie čísel s desatinnou bodkou môžete použiť funkciu strtof.

char* r = fgets(line,LINE_SIZE,stdin);

Hodnota stdin je smerník na štandardný vstup, dostupný ako globálna premenná o ktorú sa stará prekladač.

Overte, či sa riadok načítal správne

Úspešnosť načítania si overte pomocou návratovej hodnoty. Ak je hodnota smerníka r nulová, načítanie sa nepodarilo.

Pozor, funkcia fgets načítava všetko, vrátanie konca riadku \n. Ak používateľ vloží prázdny riadok, načítanie bude úspešné a načíta sa znak pre koniec riadku. S týmto musíme rátať pri vyhľadávaní a výpisoch. Preto si treba overiť aj počet načítaných znakov.

Počet načítaných znakov si môžte určiť pomocou cyklu podľa prvej nájdenej nuly alebo pomocou funkcie strlen. Alebo sa jednoducho pozrite, či sa na druhom mieste načítaného poľa nenachádza nula.

Ak ste si istí, že sa riadok načítal správne, vypíšte ho pomocou funkcie printf:

if(r != NULL && line[1] != 0){
   printf("%s",line);
}

Spracujte načítaný riadok

Program si môžte upraviť tak, aby načítaval všetky riadky až pokiaľ načítanie nezlyhá. Na to si vytvorte cyklus ktorý sa preruší ak sa načítanie riadka nepodarilo:

while (1){
    // Inicializujem pamäť
    memset(line,0,LINE_SIZE);
    // Do poľa načítam max. LINE_SIZE znakov zo štandardného vstupu.
    char* r = fgets(line,LINE_SIZE,stdin);
    // Overím si či bolo načítanie úspešné.
    if(r != NULL && line[1] != 0){
        // Načítanie je úspešné ak fgets vráti nenulovú hodnotu a načítaný reťazec je dlhši ako jeden znak
        printf("%s",line);
    }
}