===== 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.