IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Závorky v C

Aktivity
Avatar
DoZby
Člen
Avatar
DoZby:6.4.2019 21:52

Ahoj, chci se zeptat, jak poznám, kdy mám dávat v programu složené závorky? {}
Dělá mi problém zjistit, kdy mám oddělit nějakou část a taky ani nevím někdy, proč to tak je. Vysvětlím můj dotaz na příkladu.:
static void Main(string[] args)
{
Console.Write­Line("Zadej nějaké číslo, ze kterého spočítám odmocninu:");
int a = int.Parse(Con­sole.ReadLine());
if (a > 0)
{ //Proč tady musí být závorka?
Console.Write­Line("Zadal jsi číslo větší než 0, to znamená, že ho mohu odmocnit!");
double o = Math.Sqrt(a);
Console.Write­Line("Odmocni­na z čísla " + a + " je " + o);
} //Proč to nemůže být bez ní a dané jen do tich na začátku a nakonci ?
else
Console.Write­Line("Odmocni­na ze záporného čísla neexistuje!");
Console.Write­Line("Děkuji za zadání");
Console.ReadKey();
}

Ještě bych se chtěl zeptat, jakou věc dělám špatně, když mi vyskočí chyba: CS1513 } expected

Chci docílit: Abych pochopil program a věděl, kdy oddělit nějakou část programu. :D

Odpovědět
6.4.2019 21:52
Ztrácej svůj čas a čekej na zázrak
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na DoZby
pocitac770:6.4.2019 22:08

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.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
6.4.2019 22:08
Avatar
DoZby
Člen
Avatar
Odpovídá na pocitac770
DoZby:6.4.2019 22:18

Děkuji za odpověď. :)

Nahoru Odpovědět
6.4.2019 22:18
Ztrácej svůj čas a čekej na zázrak
Avatar
DarkCoder
Člen
Avatar
Odpovídá na DoZby
DarkCoder:6.4.2019 22:36

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.

Nahoru Odpovědět
6.4.2019 22:36
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
petrph
Člen
Avatar
petrph:6.4.2019 22:50

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

 
Nahoru Odpovědět
6.4.2019 22:50
Avatar
DoZby
Člen
Avatar
DoZby:7.4.2019 12:42

Děkuji všem za odpovědi. :)

Nahoru Odpovědět
7.4.2019 12:42
Ztrácej svůj čas a čekej na zázrak
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 6 zpráv z 6.