Skočiť na obsah


Programovanie v jazyku C a C#

Návody pre začiatočníkov a pokročilých



Fórum: Škôlka jazyka C
- - - - -
Fotografia

Cykly, Ovládanie cyklov, prepínač.


Cykly:

for()

Podobný ale komplexnejší ako while.
#include <stdio.h>
int main()
{
  int i, c;
  
  for (i = 1; i <= 10; i++) {   /* ukonci cyklus po 10 zadaniach */
    if ((c = getchar()) < ' ')  /* s tým, že každé zadanie je vlastne 2 krát */
      continue;                 /* pretože tam je vždy aj <ENTER> */ 
    if (c == 'z')
      break;                    
    putchar(c);
    putchar('\n');
  }
  return 0;
}
Zbavíme sa <ENTER> a bude to pracovať ako má.
 
#include <stdio.h>
int main()
{
  int i, c;
  
  for (i = 1; i <= 10; i++) {   /* ukonci cyklus po 10 zadaniach */
    if ((c = getchar()) < ' ') {  
      while ((c = getchar()) != '\n') /* Zahodenie <ENTER>. */
        ;                             /* Toto patrí k tomu! */
      continue;                  
    }
    if (c == 'z')
      break;                    
    putchar(c);
    putchar('\n');
  }
  return 0;
}
Nekonečný cyklus:
for (;;)

while()

Cyklus ktorý beží dovtedy, kým platí podmienka - tá môže byť akokoľvek zložitá.
Dôležitou vlastnosťou je to, že cyklus (telo cyklu) prebehne aj posledný krát celý po splnení podmienky.
Teda:
#include <stdio.h>
int main()
{
  int i;
  
  i = 1;
  while (i <= 99 ) {
    ((i % 3) == 0) ? printf("%d\n", i) : putchar('*');
    i++;
  }  
  return 0;
}
Aj po splnení podmienky i = 99 cyklus prebehne do konca, teda vypíše aj 99.
[libco@libcosenior testy]$ ./a.out
3
6
9
12
15
18
21
24
27
30
33
36
39
42
45
48
51
54
57
60
63
66
69
72
75
78
81
84
87
90
93
96
99
[libco@libcosenior testy]$
Často používané na zbavenie sa znaku <ENTER>:
while (getchar() != '\n')
  ;
Nekonečný cyklus:
while (1)

do { } while;

Cyklus ktorý beží dovtedy, kým platí podmienka - tá môže byť akokoľvek zložitá.
Dôležitou vlastnosťou je to, že cyklus (telo cyklu) neprebehne po splnení podmienky.
Teda:
#include <stdio.h>
int main()
{
  int i;
  
  i = 1;
  do {
    if (i % 3 == 0)
      printf("%d\n", i);
    i++;
  } while (i != 99 ); /* beží kým sa i nerovná 99, ak sa rovná, skončí */
  return 0;            /* a pokračuje ďalej v programe (return 0;) */
}
Keď sa splní podmienka i == 99, cyklus skončí a číslo 99 sa už nevypíše!
[libco@libcosenior testy]$ ./a.out
3
6
9
12
15
18
21
24
27
30
33
36
39
42
45
48
51
54
57
60
63
66
69
72
75
78
81
84
87
90
93
96
[libco@libcosenior testy]$

Ovládanie cyklov:

break;

Používa sa na vyskočenie z aktuálneho cyklu.
#include <stdio.h>
int main()
{
  int i;
  
  i = 1;
  while (1) {
    if (i % 3 == 0)
      printf("%d\n", i);
    if (i == 33)
      break;    /* pri splnení podmienky vyskočí s cyklu ( už nevykoná ani i++;) */
    i++;
  }
  return 0;     /* a pokračuje v programe (return 0;) */
}
continue;

Používa sa na preskočenie časti cyklu a vráti sa na jeho začiatok. Teda nevyskakuje z cyklu ako break.
#include <stdio.h>
int main()        /* pozor, cyklus sa stal nekonečným */
{
  int i;
  
  i = 1;
  while (1) {
    if (i % 3 == 0)
      printf("%d\n", i);
    if (i == 33)
      continue;    /* pri splnení podmienky sa vráti na začiatok cyklu */
    i++;
  }
  return 0;     /* a pokračuje v programe (return 0;) */
}
Praktické využitie:
 
#include <stdio.h>
int main()
{
  int c;
  
  while (1) {
    if ((c = getchar()) < ' ')  /* zahodenie neviditelneho znaku */
      continue;                 /* pri splnení podmienky sa vráti na začiatok cyklu */
    if (c == 'z')
      break;                    /* zastavenie po nacitani znaku 'z' */
    putchar(c);
    putchar('\n');
  }
  return 0;
}

Prepínač:

switch-case-default

Je to prepínač na mnohonásobné vetvenie programu. (použitie príkazu continue vo vzťahu ku switch nemá význam!)
#include <stdio.h>
int main()
{
  switch (getchar()) {
    case 'a':
    case 'b':
    case 'c':
      printf("Zadal si a alebo b alebo c.\n"); /* nemusia tu byť kučeravé zýtvorky ani keby */
      break;                                   /* týto časť bola obsiahla */
    case 'd':
      printf("Zadal si d.\n");
      break;
    default:
      printf("Nezadal si a, b, c, alebo d.\n");
  }
  return 0;
}
 
  • 0

Popis: while; do – while; for; switch - case - default; break; continue;
Poznámky:
Odkazy:


0 Komentárov


Najlepšie lekcie


Najnovšie pridané lekcie


Najnovšie komentáre


Najviac komentované lekcie


Najviac zobrazené lekcie


Náhodné lekcie


Na tejto stránke bolo užívateľ(ov) za posledných 30 minút

členov, návštevníkov