===== 4. Pole, ukazatel, textový řetězec =====
* prezentace: {{courses:b0b36prp:lectures:b0b36prp-lec04-slides.pdf|}}
* zkrácená verze: {{courses:b0b36prp:lectures:b0b36prp-lec04-handout.pdf|}}
* zkrácená verze 2x2: {{courses:b0b36prp:lectures:b0b36prp-lec04-handout-2x2.pdf|}}
* zkrácená verze 3x3: {{courses:b0b36prp:lectures:b0b36prp-lec04-handout-3x3.pdf|}}
* přiložené demonstrační programy: {{courses:b0b36prp:lectures:b0b36prp-lec04-codes.zip|}}
--- //[[faiglj@fel.cvut.cz|Jan Faigl]] 2025/10/15 13:52//
**Dotazy z přednášek**
Q: //Jak inicializovat hodnoty pole při definici?//
Při definici proměnné typu pole můžeme rovnou nastavit jednotlivé prvky a využít tzv. //designated initializers//. V takovém případě jsou incializované všechny prvky. Ty uvedené na zadanou hodnotu, jinak je nastavena výchozí hodnota 0.
int a[6] = {10, 12, [3] = 3, 5}; //pole a má 6 prvků s hodnotami {10, 12, 0, 3, 5, 0}, tj. nespecifkované prvky mají hodnotu 0.
int b[] = {1, 2, 3}; // pole má pouze 3 prvky {1, 2, 3}
int c[6] = {1, 2, 3}; // pole má 6 prvků { 1, 2, 3, 0, 0, 0}
int d[4] = {}; // pole má 4 prvky incializované na 0, tj. {0, 0, 0, 0}
Q: //Proč uvedený příklad načítání skončil v nekonečné smyčce?//
Načítání hodnot celých čísel funkcí ''scanf()'' ve smyčce ''while'':
#include
int main(void)
{
int v;
int i = 0;
while (scanf("%d", &v) > 0) {
printf("%d %d\n", ++i, v);
}
printf("No. of read values %d\n", i);
return 0;
}
Skončil v nekonečné smyčce, neboť původní podmínka cyklu while (scanf("%d", &v)) { ... } je vyhodnocena jako logická pravda i v případě neúspěšného načtení nové celočíselné hodnoty. V proměnné zůstane původní hodnota. Při opravě jsem, jak někdo na přednášce zmínil, zapomněl soubor uložit.