4. Pole, ukazatel, textový řetězec

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 <stdio.h>
 
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.

courses/b0b36prp/lectures/lec04.txt · Last modified: 2025/10/15 13:52 by faiglj