Diskuze: Závorky v C
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Závorkami obecně odděluješ nějakou část kódu patřící k nějaké
hlavičce (můžou to být např. taky metody, ale to pochopíš později), v
tomto případě máš jako hlavičku if-else. Řekneš programu, co má dělat
pokud bude platit ta podmínka (if), a co má dělat v opačném případě
(else). Ten kód, který je v těch závorkách náležících ke konkrétní
hlavičce proběhne pouze za té podmínky. Ostatní proběhne vždy. Počítač
neumí číst myšlenky a neví jak si chceš program strukturovat, např.
jestli pod if patří další 3 řádky nebo další 1000. V tvém konkrétním
příkladu u else závorky nejsou použity, je to z toho dúvodu, že pokud
závorky nejsou uvedeny, tak se použije pouze následující řádek ->
pokud potřebuješ do ifu/elsu/dalších věcí dát pouze jeden příkaz,
závorky psát nemusíš, já je třeba ale píšu vždy kvůli
přehlednosti.
S tou chybou ti bohužel neporadím to bude muset odpovědét nějakej
C-ista.
A používej tlačítko "přidat kód" (ostré závorky s lomítkem), takhle je
to nepřehledné a nikdo to po tobě nebude chtít číst.
Závorky uvozují blok příkazů nebo tělo funkce. Pokud chceš provádět pouze jeden příkaz, závorky nejsou třeba, pokud více příkazů představující celou jednotku, jsou nutné. Podívej na následující úryvek kódu:
// Zde zavorky nejsou nutné
if(a>0) printf("je kladne");
je totéž co:
// zde závorky nejsou nutné, ale není chyba ze tam jsou
if(a>0) {
printf("je kladne");
}
ale:
// b bude vzdy 1
b = 0;
if(a<b) a=0;
b=1;
// b bude 1 pouze tehdy, bude-li a<b.
b = 0;
if(a<b) {
a=0;
b=1;
}
Všimni si rozdílu. Příkazy uvnitř závorek tvoří jednu jednotku. Provedou se vždy všechny příkazy uvnitř složených závorek. Dost částo je to vidět u 2D polí. Tam, pokud se provádí jeden příkaz, nejsou závorky třeba. V opačném případě jsou nutné a jejich opomenutí povede k nesprávné funkci programu.
Složenými zavorkami uzavíráš blok příkazů, které se musí provést
za sebou.
Jasné je to v případě celé funkce (metody)
static void Main(string[] args)
{ všechny příkazy té funkce ;} //musí se uzavřít celá metoda
ale podobně to musíš udělat i po podmínce, pokud chceš aby se při jejím
splnění vykonal celý blok, tedy víc příkazů za sebou
takže proto
if (a > 0)
{ několik řádků příkazů; } //musi se uzavřít. Protože pokud by jsi tam
ty složené závorky nedal,tak se po if (podm) provede jen ten první příkaz
za tou podmínkou.
Stejně to musíš dělat i u příkazů cyklu, for, while,
for (int i=0;i<10;i++) {příkaz1;přkaz2;...} vše co se má provádět v
tom cyklu
Z toho je vidět, že můžeš mít v programu, několik vnořených bloků do
sebe, a každý je vnořenně označen složenými závorkami,
No a ta chyba CS1513 } expected znamená, že ti tam (aspoň jedna) uzavírací
závorka chybí. Takže to chce skutečně projít celou tu strukturu programu,a
hledat zda (a kde ) máš po každé otevřené na správném místě i
správně každý ten blok (celá funkce if, for, while)..rovněž uzavřený s
}. Pokud máš nějaký chytřejší editor, měl by ti pomoct, když klikneš
na jednu závorku, ukáže ti, kde je podle něj druhý konec...
Vlastně ještě jedna poznámka - vzhledem k tomu že tam máš Main s velkým M, tak to vypadá na kód buď v c#, a nebo možná v objektově psaném c++ ,.. A tam je ještě navíc funkce (metoda) vnořená do třídy - a i ta třída se musí taky uzavřít do { }. Takže ten kód pak vypadá
class MyClass
{
static void Main(string[] args)
{
příkazy;
} //konec metody
} //konec třídy
Zobrazeno 6 zpráv z 6.