Shrnutí na Programování v jazyce C
Programování v jazyce C: Kompletní Průvodce pro Studenty
Úvod
Tento materiál shrnuje základní standardní knihovny jazyka C a jejich rozhraní pro vstup a výstup (I/O). Je určený pro samostudium a zaměřuje se na praktické použití funkcí z <stdio.h>, <stdlib.h> a příbuzných hlaviček, nastavení lokalizace, zpracování signálů a variadické funkce. Cílem je rozdělit témata na malé dílčí části, doplnit je příklady a tabulkami pro rychlé porovnání.
Definice: Knihovna (library) v C je soubor funkcí a makro-definicí zpřístupněný přes hlavičkové soubory; I/O označuje operace pro čtení a zápis dat (standardně stdin, stdout, soubory).
Základní I/O: stdio.h
Proudové rozhraní
- stdin, stdout, stderr — předdefinované proudy
- Typy: FILE, size_t, fpos_t
Definice: FILE je abstrakce pro proud (soubor, konzole nebo jiné I/O zařízení), přes který voláme funkce jako fread/fwrite, fprintf atd.
Funkce pro znaky a řetězce
- getchar(), putchar()
- int getchar(void) čte jeden znak ze stdin a vrací EOF při konci souboru.
- int putchar(int c) zapisuje znak do stdout; při chybě vrací EOF.
- Ekvivalentní: getc(stdin), putc(c, stdout)
Příklad: filtr převádějící vše na malá písmena
#include <stdio.h>
#include <ctype.h>
int main(void) {
int c;
while ((c = getchar()) != EOF)
putchar(tolower(c));
return 0;
}
-
fgets(char *s, int size, FILE *stream)
- Čte až do délky size-1 nebo do nového řádku; uloží '\n' pokud byl čten.
- Vrací NULL při EOF nebo chybě.
- Bezpečnější než historické gets().
-
puts(const char *s)
- Zapíše řetězec do stdout a přidá nový řádek. Vrací EOF při chybě.
Formátované I/O
-
printf(const char *fmt, ...)
- Formátovací specifikátory: %d, %o, %x, %u, %c, %s, %e, %f, %g
- Příklady formátů: %5.2lf, %10s, %-10s, %.10s, %#g, %06x
-
scanf(const char *fmt, ...)
- Vrací počet úspěšně načtených položek.
- Bílé znaky v formátu ignorují odpovídající bílé znaky ve vstupu.
- Podporuje * pro potlačení přiřazení a specifikátory šířky např. %2d.
Příklad použití scanf:
int i; float x; char name[50];
scanf("%2d %f %*d %2s", &i, &x, name);
Vstup: 56789 0123 45a72 Výsledek: i = 56, x = 789.0, name = "45"
I/O do/z paměti a souboru
- fprintf/fscanf pro soubory: fprintf(FILE *f, const char *fmt, ...)
- sprintf/sscanf pro řetězce v paměti: sprintf(char *s, const char *fmt, ...)
Poznámky:
- scanf vyžaduje ukazatele jako argumenty.
- sprintf je potenciálně nebezpečné (přetečení bufferu) — používejte bezpečné alternativy, pokud jsou dostupné.
Seznam funkcí stdio (vybrané)
| Operace | Funkce |
|---|---|
| Otevření / zavření | fopen, freopen, fclose, tmpfile |
| Čtení / zápis bloků | fread, fwrite |
| Čtení řádku / znaku | fgets, fgetc, getc, getchar |
| Zápis řetězce / znaku | fputs, fputc, putchar, puts |
| Pozice v souboru | fseek, ftell, fgetpos, fsetpos, rewind |
| Stav souboru | feof, ferror, clearerr, perror |
Chybové kódy: errno.h
- errno je globální (pseudo)proměnná nastavovaná při chybách některých volání.
- Standardní hodnoty: EDOM, EILSEQ, ERANGE
Definice: errno indikuje typ chyby provedené standardní funkcí; na začátku programu je nulová.
Použití: volání perror() vypíše popis poslední chyby podle errno.
Matematické a limitní hlavičky
- math.h: trigonometrické, exponentační, zaokrouhlovací funkce; makra INFINITY, NAN, isinf(), isnan().
- float.h: charakteristiky floating-point typů jako FLT_MAX, DBL_EPSILON
- limits.h: rozsahy celočíselných typů jako INT_MAX, LONG_MIN
Variadické funkce: stdarg.h
- Makra: va_list, va_start(ap, lastfix), va_arg(ap, type), va_end(ap)
- Princip: funkce přijme proměnný počet argumentů (např. printf) a iteruje přes ně přes va_list.
Příklad: součet čísel ukončených nulou
#in
Už máš účet? Přihlásit se
Knihovny a I/O v C
Klíčová slova: Základy jazyka C, Programování v C - techniky, Paměť a ukazatele v C, Knihovny a I/O v C, Ladění a testování, Nástroje, ladění a testování v C, C a C++, Programování v C++, Sestavování a binární formáty, Optimalizace a výkon v C, Systémy správy verzí, Zpracování textu a Unicode v C
Klíčové pojmy: stdin, stdout, stderr jsou základní proudy v <stdio.h>, getchar()/putchar() čtou a zapisují jednotlivé znaky, EOF značí konec souboru, fgets() čte řádky bezpečněji než gets(); puts() zapíše řetězec s novým řádkem, printf()/scanf() poskytují formátované I/O; kontrolujte návratové hodnoty, fprintf/fscanf a sprintf/sscanf pro soubory a paměť, errno a perror() pro hlášení chyb; errno je nastavováno při chybách, stdarg.h: va_start, va_arg, va_end pro funkce s proměnným počtem argumentů, signal.h: signal() a raise() pro zpracování signálů; používejte jen signal-safe kódy, setjmp/longjmp umožňují non-local jumps, ale mají omezení u non-volatile proměnných, locale.h mění chování funkcí závislých na jazyku/regionu, Kontrolujte návratové hodnoty I/O funkcí a vyhýbejte se nebezpečným rutinám (gets, sprintf)