This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
dydaktyka:cprog:2015:switch [2015/11/19 22:42] pkleczek [Instrukcje continue i break] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Konstrukcja warunkowa "switch" ====== | ||
- | |||
- | ===== Cel laboratorium ===== | ||
- | * Zapoznanie z instrukcją sterującą ''break'' oraz ''continue'' | ||
- | * Zapoznanie z konstrukcją warunkową ''switch'' | ||
- | |||
- | |||
- | ===== Instrukcje "continue" i "break" ===== | ||
- | |||
- | Instrukcja ''continue'' powoduje natychmiastowe przejście do kolejnego obiegu pętli, z pominięciem ewentualnych dalszych instrukcji po ''continue'' (a więc w przypadku pętli ''while'' powoduje to przejście do sprawdzania warunku, a w przypadku pętli ''for'' -- dokonanie aktualizacji, a następnie przejście do warunku). | ||
- | |||
- | Instrukcja ''break'' powoduje natychmiastowe opuszczenie pętli i przejście do kolejnego etapu programu. | ||
- | |||
- | :!: Używaj ''continue'' i ''break'' w pętlach tylko wtedy, gdy zwiększa to czytelność kodu! | ||
- | |||
- | ---- | ||
- | |||
- | **Przykład** | ||
- | <code c> | ||
- | #include <stdio.h> | ||
- | |||
- | int main(void) | ||
- | { | ||
- | int i; | ||
- | |||
- | for (i = 1; i <= 10; i++) { | ||
- | if (i == 4) { | ||
- | printf("<ominiete> "); | ||
- | continue; | ||
- | } | ||
- | |||
- | printf("%d ", i); | ||
- | |||
- | if (i == 8) { | ||
- | printf("<przerwane> "); | ||
- | break; | ||
- | } | ||
- | } | ||
- | |||
- | printf("\n\nKoniec.\n"); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | Rezultat wykonania programu: | ||
- | <code> | ||
- | 1 2 3 <ominiete> 5 6 7 8 <przerwane> | ||
- | |||
- | Koniec. | ||
- | </code> | ||
- | ===== Instrukcja warunkowa "switch" ===== | ||
- | |||
- | Instrukcja ''switch'' bardzo przypomina w działaniu konstrukcję [[http://home.agh.edu.pl/~pkleczek/dokuwiki/doku.php?id=dydaktyka:cprog:2015:conditionals#instrukcja_warunkowa_if-else_if-else|if-else if-else]], z tym że pozwala na podjęcie jakiegoś działania w zależności od wartości **jednego** wyrażenia. | ||
- | |||
- | Ogólna postać: | ||
- | <code> | ||
- | switch (wyrażenie) { | ||
- | case wartosc1: | ||
- | instrukcja1 | ||
- | | ||
- | case wartosc2: | ||
- | instrukcja2 | ||
- | | ||
- | ... | ||
- | | ||
- | case wartosc_n: | ||
- | instrukcja_n | ||
- | | ||
- | default: | ||
- | instrukcja_domyslna | ||
- | } | ||
- | </code> | ||
- | |||
- | Wyrażenie najczęściej jest zmienną o określonej wartości. Jeśli tą wartością jest ''wartosc1'', wykonywane są instrukcje następujące po odpowiedniej etykiecie ''case'' aż do instrukcji przerywającej (z reguły ''break''). Oznacza to, że w przypadku braku instrukcji przerywającej wykonane zostaną instrukcje odpowiadające kolejnym przypadkom. Przypadek ''default'' to element opcjonalny, określa instrukcje wykonywane wtedy, gdy wartość zmiennej nie jest równa żadnemu z przypadków wyszczególnionych z użyciem ''case''. | ||
- | |||
- | ---- | ||
- | |||
- | **Przykład** | ||
- | |||
- | <code c> | ||
- | #include <stdio.h> | ||
- | |||
- | int main(void) | ||
- | { | ||
- | int n; | ||
- | |||
- | printf("Podaj liczbe naturalna: "); | ||
- | scanf("%d", &n); | ||
- | |||
- | switch (n) { | ||
- | case 1: // zauwaz brak instrukcji (np. break) | ||
- | case 2: | ||
- | printf("Jeden lub dwa!\n"); | ||
- | break; | ||
- | |||
- | case 3: | ||
- | printf("Trzy!\n"); | ||
- | break; | ||
- | |||
- | default: | ||
- | printf("Cos innego...\n"); | ||
- | break; | ||
- | } | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | ---- | ||
- | |||
- | **Zadanie**\\ | ||
- | Napisz program, który dla zadanego przez użytkownika numeru dnia tygodnia wypisze na ekran jego nazwę (np. dla ''1'' -- poniedziałek). W przypadku błędnych danych (liczba spoza zakresu) program powinien wyświetlić stosowny komunikat. \\ | ||
- | Użyj instrukcji ''switch''. | ||