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);
}
}