5. díl - Podmínky (větvení) v jazyce C

C a C++ Céčko Základní konstrukce C Podmínky (větvení) v jazyce C

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Typový systém v céčku podruhé: Datové typy, jsme si podrobně probrali datové typy. Abychom si něco naprogramovali, potřebujeme nějak reagovat na různé situace. Může to být například hodnota zadaná uživatelem, podle které budeme chtít měnit další běh programu. Říkáme, že se program větví a k větvení používáme podmínky, těm se budeme věnovat celý dnešní tutoriál. Vytvoříme program na výpočet odmocniny a vylepšíme naši kalkulačku.

Podmínky

Podmínky zapisujeme pomocí klíčového slova if, za kterým následuje logický výraz. Pokud je výraz pravdivý, provede se následující příkaz. Pokud ne, následující příkaz se přeskočí a pokračuje se až pod ním. Vyzkoušejme si to:

if (5 < 15)
        printf("Pravda \n");
printf("Program zde pokracuje dal \n");

Výstup programu:

Konzolová aplikace
Pravda
Program zde pokracuje dal

Pokud podmínka platí (což zde ano), provede se příkaz vypisující do konzole text pravda. V obou případech program pokračuje dál. Součástí výrazu samozřejmě může být i proměnná:

int a;
printf("Zadej nejake cislo \n");
scanf("%d", &a);
if (a > 5)
        printf("Zadal jsi cislo vetsi nez 5! \n");
printf("Dekuji za zadani \n");

Ukažme si nyní relační operátory, které můžeme ve výrazech používat:

Operátor C-Like Zápis
Rovnost ==
Je ostře větší >
Je ostře menší <
Je větší nebo rovno >=
Je menší nebo rovno <=
Nerovnost !=
Obecná negace !

Rovnost zapisujeme dvěma == proto, aby se to nepletlo s běžným přiřazením do proměnné, které se dělá jen jedním =. Pokud chceme nějaký výraz znegovat, napíšeme ho do závorky a před něj vykřičník. Když budeme chtít vykonat více než jen jeden příkaz, musíme příkazy vložit do bloku ze složených závorek:

#include <stdio.h>
#include <stdlib.h>
#include <math.h> // Nesmíme zapomenout na include hlavičky math.h, obsahuje funkci pro odmocninu
int main(int argc, char** argv) {
        int a;
        printf("Zadej nejake cislo, ze ktereho spocitam odmocninu: \n");
        scanf("%d", &a);
        if (a > 0)
        {
                printf("Zadal jsi cislo vetsi nez 0, to znamena, ze ho mohu odmocnit!\n");
                double o = sqrt(a);
                printf("Odmocnina z cisla %d je %f \n", a, o);
        }
        printf("Dekuji za zadani \n");
        return (EXIT_SUCCESS);
}

Výstup:

Konzolová aplikace
Zadej nejake cislo, ze ktereho spocitam odmocninu:
144
Zadal jsi cislo vetsi nez 0, to znamena, ze ho mohu odmocnit!
Odmocnina z cisla 144 je 12.000000
Dekuji za zadani

Často můžete vidět použití bloku i v případě, že je pod podmínkou jen jeden příkaz, mnohdy je to totiž přehlednější.

Program načte od uživatele číslo a pokud je větší než 0, vypočítá z něj druhou odmocninu. Mimo jiné jsme použili funkci z knihovny math.h, která v sobě obsahuje řadu užitečných matematických funkcí, někdy si ji blíže představíme. sqrt() vrací hodnotu druhé odmocniny jako double. Bylo by hezké, kdyby nám program vyhuboval v případě, že zadáme záporné číslo. S dosavadními znalostmi bychom napsali něco jako:

#include <stdio.h>
#include <stdlib.h>
#include <math.h> // Nesmíme zapomenout na include hlavičky math.h, obsahuje funkci pro odmocninu
int main(int argc, char** argv) {
        int a;
        printf("Zadej nejake cislo, ze ktereho spocitam odmocninu: \n");
        scanf("%d", &a);
        if (a > 0)
        {
                printf("Zadal jsi cislo vetsi nez 0, to znamena, ze ho mohu odmocnit!\n");
                double o = sqrt(a);
                printf("Odmocnina z cisla %d je %f \n", a, o);
        }
        if (a <= 0)
                printf("Odmocnina ze zaporneho cisla neexistuje");

        printf("Dekuji za zadani \n");
        return (EXIT_SUCCESS);
}

Všimněte si, že musíme pokrýt i případ, kdy se a == 0, nejen když je menší. Kód však můžeme výrazně zjednodušit pomocí klíčového slova else, které vykoná následující příkaz nebo blok příkazů v případě, že se podmínka neprovede:

#include <stdio.h>
#include <stdlib.h>
#include <math.h> // Nesmíme zapomenout na include hlavičky math.h, obsahuje funkci pro odmocninu
int main(int argc, char** argv) {
        int a;
        printf("Zadej nejake cislo, ze ktereho spocitam odmocninu:  \n");
        scanf("%d", &a);
        if (a > 0)
        {
                printf("Zadal jsi cislo vetsi nez 0, to znamena, ze ho mohu odmocnit!\n");
                double o = sqrt(a);
                printf("Odmocnina z cisla %d je %f \n", a, o);
        }
        else
                printf("Odmocnina ze zaporneho cisla neexistuje");

        printf("Dekuji za zadani \n");
        return (EXIT_SUCCESS);
}

Kód je mnohem přehlednější a nemusíme vymýšlet opačnou podmínku, což by v případě složené podmínky mohlo být někdy i velmi obtížné. V případě více příkazů by byl za else opět blok { }.

Else se také využívá v případě, kdy potřebujeme v příkazu manipulovat s proměnnou z podmínky a nemůžeme se na ni tedy ptát znovu. Program si sám pamatuje, že se podmínka nesplnila a přejde do sekce else. Ukažme si to na příkladu: Mějme číslo a, kde bude hodnota 0 nebo 1 a po nás se bude chtít, abychom hodnotu prohodili (pokud tam je 0, dáme tam 1, pokud 1, dáme tam 0). Naivně bychom mohli kód napsat takto:

int a = 0; // do a si přiřadíme na začátku 0

if (a == 0) // pokud je a 0, dáme do něj jedničku
        a = 1;
if (a == 1) // pokud je a 1, dáme do něj nulu
        a = 0;

printf("%d", a);

Nefunguje to, že? Pojďme si projet, co bude program dělat. Na začátku máme v a nulu, první podmínka se jistě splní a dosadí do a jedničku. No ale rázem se splní i ta druhá. Co s tím? Když podmínky otočíme, budeme mít ten samý problém s jedničkou. Jak z toho ven? Ano, použijeme else.

int a = 0; // do a si přiřadíme na začátku 0

if (a == 0) // pokud je a 0, dáme do něj jedničku
        a = 1;
else // pokud je a 1, dáme do něj nulu
        a = 0;

printf("%d", a);

Podmínky je možné skládat a to pomocí dvou základních operátorů:

Operátor C-Like zápis
A zároveň &&
Nebo ||

Uveďme si příklad:

int a;
printf("Zadej cislo v rozmezi 10-20 \n");
scanf("%d", &a);
if ((a >= 10) && (a <= 20))
        printf("Zadal jsi spravne \n");
else
        printf("Zadal jsi spatne \n");

S tím si zatím vystačíme, operátory se pomocí závorek samozřejmě dají kombinovat.

int a;
printf("Zadej cislo v rozmezi 10-20 nebo 30-40 \n");
scanf("%d", &a);
if (((a >= 10) && (a <= 20)) || ((a >=30) && (a <= 40)))
        printf("Zadal jsi spravne \n");
else
        printf("Zadal jsi spatne \n");

Switch

Zápis více podmínek pod sebou (relativně) zjednodušuje konstrukce switch. Vzpomeňme si na naši kalkulačku v prvních lekcích, která načetla 2 čísla a vypočítala všechny 4 operace. Nyní si ale budeme chtít zvolit, kterou operaci chceme. Bez switche bychom napsali kód podobný tomuto:

double a;
double b;
int volba; // Mohli bychom použít char, abychom zbytečně nepoužívali moc místa
double vysledek = 0.0;
printf("Vitejte v kalkulacce \n");
printf("Zadejte prvni cislo: \n");
scanf("%lf", &a);
printf("Zadejte druhe cislo: \n");
scanf("%lf", &b);
printf("Zvolte si operaci: \n");
printf("1 - scitani \n");
printf("2 - odcitani \n");
printf("3 - nasobeni \n");
printf("4 - deleni \n");
scanf("%d", &volba);
if (volba == 1)
        vysledek = a + b;
else if (volba == 2)
        vysledek = a - b;
else if (volba == 3)
        vysledek = a * b;
else if (volba == 4)
        vysledek = a / b;
if ((volba > 0) && (volba < 5))
        printf("Vysledek: %lf", vysledek);
else
        printf("Neplatna volba \n");
printf("\n");
printf("Dekuji za pouziti kalkulacky");

Výstup:

Konzolová aplikace
Vitejte v kalkulacce
Zadejte prvni cislo:
3.14
Zadejte druhe cislo:
2.14
Zvolte si operaci:
1 - scitani
2 - odcitani
3 - nasobeni
4 - deleni
2
Vysledek: 1.000000
Dekuji za pouziti kalkulacky

Všimněte si, že jsme proměnnou výsledek deklarovali na začátku, jen tak do ni můžeme potom přiřazovat. Kdybychom ji deklarovali u každého přiřazení, Céčko by kód nezkompilovalo a vyhodilo by chybu. Proměnná může být deklarována (založena v paměti) vždy jen jednou. Další vychytávka je kontrola správnosti volby. Program by v tomto případě fungoval stejně i bez else, ale nač se dále ptát, když již máme výsledek.

Nyní si zkusíme napsat ten samý kód pomocí switche:

double a;
double b;
int volba; // Mohli bychom použít char, abychom zbytečně nepoužívali moc místa
double vysledek;
printf("Vitejte v kalkulacce \n");
printf("Zadejte prvni cislo: \n");
scanf("%lf", &a);
printf("Zadejte druhe cislo: \n");
scanf("%lf", &b);
printf("Zvolte si operaci: \n");
printf("1 - scitani \n");
printf("2 - odcitani \n");
printf("3 - nasobeni \n");
printf("4 - deleni \n");
scanf("%d", &volba);
switch(volba)
{
        case 1:
                vysledek = a + b;
                break;
        case 2:
                vysledek = a - b;
                break;
        case 3:
                vysledek = a * b;
                break;
        case 4:
                vysledek = a / b;
                break;
}
if ((volba > 0) && (volba < 5))
        printf("Vysledek: %f", vysledek);
else
        printf("Neplatna volba \n");
printf("\n");
printf("Dekuji za pouziti kalkulacky");

Vidíme, že kód je trochu přehlednější. Pokud bychom potřebovali v nějaké větvi switche spustit více příkazů, překvapivě je nebudeme psát do bloku, ale rovnou pod sebe. Blok {} nám zde nahrazuje příkaz break, který způsobí vyskočení z celého switche. Switch může místo case x: obsahovat ještě možnost default:, která se vykoná v případě, že nebude platit žádný case. Je jen na vás, jestli budete switch používat, obecně se vyplatí jen při větším množství příkazů a vždy jde nahradit sekvencí if a else. Nezapomínejte na breaky, pokud jej neuvedete, program propadne do další větve a to i když by nebyla splněná podmínka! V minulosti se takovéto propadávání využívalo schválně, dnešní IDE před tímto použitím ale spíše již varují. Kdybyste s tím měli problémy, použijte sekvenci if - else.

To bychom měli. V příští lekci, Cykly v Céčku, nás čekají pole a cykly. Tím dovršíme základní znalosti, máte se na co těšit :)


 

Stáhnout

Staženo 233x (32.31 kB)
Aplikace je včetně zdrojových kódů v jazyce c

 

 

Článek pro vás napsal Samuel Kodytek
Avatar
Jak se ti líbí článek?
7 hlasů
Autor se věnuje Javě, Kotlinu, PHP, C, HTML. Zajímá ho spíše game design.
Miniatura
Všechny články v sekci
Základní konstrukce jazyka C
Miniatura
Následující článek
Cvičení k 4.-5. lekci Céčka
Aktivity (8)

 

 

Komentáře
Zobrazit starší komentáře (16)

Avatar
DarkCoder
Člen
Avatar
DarkCoder:1.11.2017 13:05
  1. Přesně tak, ke změně proměnné nedojde. Tím, jak se jednotlivé příkazy vyhodnocují postupně, se provedou obě podmínky a proměnná tak zůstane nezměněna.
  2. Rozdíl jsem popsal na konci předchozího příspěvku. if-else-if je efektivnější nežli použití samotných if. Pro zpracování potřebuje méně strojových instrukcí a zároveň, pokud je nalezena shoda, ostatní if se přeskočí.

Mějme následující dva úryvky kódu a podívejme se co se stane, když volba bude 2.

if (volba == 1) vysledek = a + b;
if (volba == 2) vysledek = a - b;
if (volba == 3) vysledek = a * b;
if (volba == 4) vysledek = a / b;
if ((volba > 0) && (volba < 5)) printf("Vysledek: %lf", vysledek);
if ((volba <= 0) && (volba >= 5)) printf("Neplatna volba \n");

Zde se budou postupně provádět a vyhodnocovat všechny podmínky, i tehdy když už je výsledek známý. Přiřadí proměnné vysledek rozdíl dvou hodnot a zobrazí jej. Na tuto verzi zapomenout a neužívat - neefektivní.

kdežto:

if (volba == 1)         vysledek = a + b;
else if (volba == 2) vysledek = a - b;
else if (volba == 3) vysledek = a * b;
else if (volba == 4) vysledek = a / b;
if ((volba > 0) && (volba < 5)) printf("Vysledek: %lf", vysledek);
else printf("Neplatna volba \n");

Zde se budou postupně provádět a vyhodnocovat všechny podmínky, dokud není podmínka platná. Zbylé podmínky (test na rovnost 3 a 4) se přeskočí, kromě té kde vypisuji výsledek. Přiřadí proměnné vysledek rozdíl dvou hodnot a zobrazí jej.

pro srovnání:

switch(volba){
    case 1:
        printf("Vysledek: %f\n", a+b);
        break;
    case 2:
        printf("Vysledek: %f\n", a-b);
        break;
    case 3:
        printf("Vysledek: %f\n", a*b);
        break;
    case 4:
        printf("Vysledek: %f\n", a/b);
        break;
    default: printf("Neplatná volba \n");
}

Zde nepotřebuji proměnnou a ještě mi odpadlo vyhodnocování další podmínky.

Odpovědět  +1 1.11.2017 13:05
"Naučíš-li se disciplíně, naučím Tě, jak mocným mohu být." - Jazyk C
Avatar
DarkCoder
Člen
Avatar
DarkCoder:1.11.2017 20:46

Chyba v mém předchozím příspěvku. Pro výpis proměnné typu double se pochopitelně u funkce printf() používá specifikátor formátu %f nikoli %lf. Tato odlišnost je pouze u funkce scanf().

Odpovědět 1.11.2017 20:46
"Naučíš-li se disciplíně, naučím Tě, jak mocným mohu být." - Jazyk C
Avatar
Tomas Bahensky:9. února 16:23

Ahoj mam dotaz ohledne funkce switch. U prikladu se Simpsonovymi je vzdy u "case" uvedena dana volba v jednoduchych zavorkach....case 'a'....case 'b'...atd. Pokud je tam nedam, hlasi mi to chybu a program se ani nespusti.
Kdyz dam mezi zvorky cislo, tak to funguje, ovsem cislo bez zavorek opet nefunguje respektive compiler to prechrousta, spusti se program, ale dana volba nezobrazi zadny vysledek.
No ale v kapitole 5 u prikladu s kalkulackou za vyuziti switch, je vzdy pouzito cislo (case 1, case 2) bez zavorek a vse funguje bez problemu.

Muzete mi prosim nekdo vysvetlit cim to je pripadne odkazat na nejaky clanek, kde je to vysvetleno?

Diky!

 
Odpovědět 9. února 16:23
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomas Bahensky
DarkCoder:9. února 17:08

Příklad se Simpsonovými jsem neviděl, nicméně vysvětlení lze podat i bez něj.

Příkaz switch pracuje s celočíselnými proměnnými (typ int a typ char). Typ char lze použít i tam kde postačí malé celé číslo. Každý znak má svoji hodnotu, v jazyce C se vychází s ASCII tabulky. Konkrétně:

case 1: není totéž co     case '1':

V prvním případě se porovnává řídící proměnná příkazu switch s hodnotou 1, ve druhém případě se řídící proměnná porovnává s hodnotou 49 (ASCII hodnota znaku '1' je 49);

Proto je důležité a je třeba rozlišovat to, zda v case použiji jednoduché uvozovky nebo ne.

Oba způsoby je možno kombinovat ale je třeba znát hodnotu znaku. Např. následující úryvek kódu není správný

char c;

switch(c) {
  case 'A': printf("Pismeno A"); break;
  case 65: printf("Cislo 65"); break;
}
Odpovědět 9. února 17:08
"Naučíš-li se disciplíně, naučím Tě, jak mocným mohu být." - Jazyk C
Avatar
Odpovídá na DarkCoder
Tomas Bahensky:9. února 20:09

Diky moc za reakci....akorat jsem tedy zjistil, ze je to krapet slozitejsi, nez jsem si myslel :))) Jsem samouk zacatecnik, takze se dostavam casto do slepych ulicek...

Nicmene jsem jsem mel na mysli priklad viz nize versus ta kalkulacka zminena o ctyri prispevky v diskuzi zpet.

int main()
{
char volba;
printf ("Vyber si nejakou postavu ze Simpsonovych: \n");
printf ("\n");

printf ("a) Homer \n");
printf ("b) Bart \n");
printf ("c) Marge \n");
printf ("d) Liza \n");
printf ("e) Maggie \n");
printf ("\n");

scanf ("%c", &volba);
switch (volba)
{
case 'a':
printf ("Jmeno: Homer Simpson \n");
printf ("Vek: 38 \n");
printf ("Zamestnani: bezpecnostni technik \n");
break;
case 'b':
printf ("Jmeno: Bart Simpson \n");
printf ("Vek: 10 \n");
printf ("Zamestnani: student \n");
break;
case 'c':
printf ("Jmeno: Marge Simpson \n");
printf ("Vek: 35 \n");
printf ("Zamestnani: zena v domacnosti \n");
break;
case 'd':
printf ("Jmeno: Liza Simpson \n");
printf ("Vek: 8 \n");
printf ("Zamestnani: studentka \n");
break;
case 'e':
printf ("Jmeno: Maggie Simpson \n");
printf ("Vek: 8 mesicu \n");
printf ("Zamestnani: batole \n");
break;
}
return (0);
}

Na prvni pohled mi to prislo jako stejna konstrukce, ale evidentne to tak neni. Kdyz dam do tohoto prikladu se Simpsnovejma jednoduchy cisla bez zavorek, tak to nefunguje, kdezto u kalkulacky jo. A netusim proc. Jestli jsi to v tom predchozim prispevku vysvetlil, tak se omlouvam, ale zrejme jsem to nepochopil :)

Diky!

 
Odpovědět 9. února 20:09
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomas Bahensky
DarkCoder:9. února 22:11

Není to složité. Čím více si budeš s řídícími příkazy pohrávat, bude Ti to víc a víc jasnější.

Příkaz switch očekává nějaký identifikátor (v našem případě proměnnou volba). Proměnná volba je typu char, tedy je očekáván znak. Znak může být reprezentován mnoha způsoby. Tím nejčastějším je znak uzavřený mezi jednoduchými uvozovkami. Ale může být i číselně (každý znak má svoji ASCII hodnotu). Např. ASCII hodnota znaku 'A' je 65. A jelikože switch nesmí obsahovat dvě totožné hodnoty, je příklad v mém předchozím příspěvku nesprávný. I s čísly příklad se Simpsonovýma funguje. Viz. následující z důvodu jednoduchosti poupravené dva kódy, které jsou funkčně totožné:

Varianta s čísly

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void){
        char volba;

        printf("Vyber si nejakou postavu ze Simpsonovych\n\n");
        printf("a) Homer\n");
        printf("b) Bart\n");
        printf("c) Marge\n");
        printf("d) Liza\n");
        printf("e) Maggie\n\n");

        volba = getchar();
        fseek(stdin, 0L, SEEK_END);

        switch (volba){
                case 97:  printf("Homer Simpson\n");
                                break;
                case 98:  printf("Bart Simpson\n");
                                break;
                case 99:  printf("Marge Simpson\n");
                                break;
                case 100: printf("Liza Simpson\n");
                                break;
                case 101: printf("Maggie Simpson\n");
                                break;
        }

        return 0;
}

Varianta se znaky

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void){
        char volba;

        printf("Vyber si nejakou postavu ze Simpsonovych\n\n");
        printf("a) Homer\n");
        printf("b) Bart\n");
        printf("c) Marge\n");
        printf("d) Liza\n");
        printf("e) Maggie\n\n");

        volba = getchar();
        fseek(stdin, 0L, SEEK_END);

        switch (volba){
                case 'a':  printf("Homer Simpson\n");
                                break;
                case 'b':  printf("Bart Simpson\n");
                                break;
                case 'c':  printf("Marge Simpson\n");
                                break;
                case 'd': printf("Liza Simpson\n");
                               break;
                case 'e': printf("Maggie Simpson\n");
                               break;
        }

        return 0;
}
Odpovědět 9. února 22:11
"Naučíš-li se disciplíně, naučím Tě, jak mocným mohu být." - Jazyk C
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomas Bahensky
DarkCoder:9. února 22:53

A takto to máš s čísly jako volba menu:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void) {
        int volba;

        printf("Vyber si nejakou postavu ze Simpsonovych\n\n");
        printf("1) Homer\n");
        printf("2) Bart\n");
        printf("3) Marge\n");
        printf("4) Liza\n");
        printf("5) Maggie\n\n");

        scanf("%d", &volba);

        switch (volba) {
        case 1:  printf("Homer Simpson\n"); break;
        case 2:  printf("Bart Simpson\n"); break;
        case 3:  printf("Marge Simpson\n"); break;
        case 4:  printf("Liza Simpson\n"); break;
        case 5:  printf("Maggie Simpson\n"); break;
        }

        return 0;
}

To nejpodstatnější je typ řídící proměnné, specifikace formátu ve funkci scanf() a zápis case.

Odpovědět 9. února 22:53
"Naučíš-li se disciplíně, naučím Tě, jak mocným mohu být." - Jazyk C
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomas Bahensky
DarkCoder:9. února 23:16

S číselnou volbou jako znaky

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void) {
        char volba;

        printf("Vyber si nejakou postavu ze Simpsonovych\n\n");
        printf("1) Homer\n");
        printf("2) Bart\n");
        printf("3) Marge\n");
        printf("4) Liza\n");
        printf("5) Maggie\n\n");

        volba = getchar();
        fseek(stdin, 0L, SEEK_END);

        switch (volba) {
        case '1':  printf("Homer Simpson\n"); break;
        case '2':  printf("Bart Simpson\n"); break;
        case '3':  printf("Marge Simpson\n"); break;
        case '4':  printf("Liza Simpson\n"); break;
        case '5':  printf("Maggie Simpson\n"); break;
        }

        return 0;
}
Odpovědět 9. února 23:16
"Naučíš-li se disciplíně, naučím Tě, jak mocným mohu být." - Jazyk C
Avatar
Odpovídá na DarkCoder
Tomas Bahensky:10. února 14:06

Diky DarkCoder! Uz mi to zacina byt jasny.... :) Cele to je tedy o tom, jaky typ promenne definuji a zdali ma byt vkladana promenna cislo nebo znak. Podle toho pouziji bud samotne cislo (odpovidajici potrebnemu znaku v ASCII), cislo v zavorkach a nebo znak v zavorkach. Je to tak?

A jeste posledni otazku, jak tu vlozim do diskuze priklad tak, aby byl graficky zobrazen jako v compileru a ne jako prosty text (ctrl C, ctrl V)?

Diky!

 
Odpovědět 10. února 14:06
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomas Bahensky
DarkCoder:10. února 15:17

Přesně tak. Celé to je o typu a o tom, jak danou proměnnou zpracováváš. Příklad, kde znaku odpovídá číslo, ber z hlediska zajímavosti. Takto bys to ve skutečnosti dělat neměl, ale jsou případy, kdy se to velmi hodí. Stejně tak by bylo nesmyslné, abys číslo reprezentoval znakem.

Jednoduše, je-li identifikátor typu znak, použij znak uzavřený mezi jednoduché uvozovky, je-li celočíselný, použij celočíselnou hodnotu bez jakýchkoli uvozovek. Př.

char cVolba;

switch(cVolba){
  case 'a': //...
}

nebo

int iVolba;

switch(iVolba){
  case 1: //...
}

Výše uvedené příklady jsou primitivní, ale v komplexních úlohách si můžeš vypomoci prefixem, kde Ti i letmý pohled na identifikátor řekne jakého je typu a jak s ním pracovat (Např. cVolba, iVolba, pVolba apod.).

Pro zobrazení kódu jako v překladači použij párový tag (vložení zdrojového kódu, je umístěn nad textovým polem) do kterého následně vložíš zdrojový kód.

Odpovědět 10. února 15:17
"Naučíš-li se disciplíně, naučím Tě, jak mocným mohu být." - Jazyk C
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 26. Zobrazit vše