Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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: Deklarace proměné uvnitř cyklu - chyba?

Aktivity
Avatar
dolakdavid
Člen
Avatar
dolakdavid:9.12.2013 0:06

Ahoj, zkoušel jsem napsat program na hádání čísel od 1 do 100 s tím že když se seknete, napoví vám jestli je číslo větší nebo menší. Jsem začátečník a nechápu proč mi to nechce VS zežvejknout.

namespace Hadac
{
class Program
{
static void Main(string[] args)
{
Random nh = new Random();
int cislo = nh.Next(0, 101);
Console.Write­Line("Myslím si číslo od 1 do 100, uhodnes ho? Zadej svůj tip a stiskni enter");
do {
int typ = Convert.ToInt32(Con­sole.ReadLine());
if(typ > cislo){Console­.WriteLine("Čís­lo je menší");}
else{Console.Wri­teLine("Číslo je větší");}
}
while(typ != cislo); // TADY u proměné "typ" to píše že neexistuje v daném kontextu

Console.Write­Line("Hurá! Uhodl jsi! Stisknutím libovolné klávesi ukončíš program.");
Console.ReadKey();
}

}
}

 
Odpovědět
9.12.2013 0:06
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na dolakdavid
Jan Vargovský:9.12.2013 0:37

Použí prosím tlačítko vložit kód.

 
Nahoru Odpovědět
9.12.2013 0:37
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na dolakdavid
Jan Vargovský:9.12.2013 0:44

Každopádně tomu vadí to, že proměnná typ, není viditelná zvenku toho cyklu.

 
Nahoru Odpovědět
9.12.2013 0:44
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na dolakdavid
Milan Křepelka:9.12.2013 8:17

Obyčejně stačí když se nespokojíš se stavem v mysli typu - "pomóc ono mě to nechce VS zežvejnkout". Mnohem lepší je

  • pokusit se přeložit a pochopit anglicky psaný text k té chybě
  • označím hlášku a zmáčknu F1

Chyť hladovému rybu a nasytíš ho na celý den. Nauč ho rybařit a nasytíš ho na celý život

 
Nahoru Odpovědět
9.12.2013 8:17
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Milan Křepelka
Jan Vargovský:9.12.2013 8:36

To, že ta chybová hláška není jen nějaký žvást tady lidu nenaučíš :)

 
Nahoru Odpovědět
9.12.2013 8:36
Avatar
dolakdavid
Člen
Avatar
Odpovídá na Jan Vargovský
dolakdavid:9.12.2013 10:17

Jj, to jsem pochopil, všichni mi tu píšete že si neumím přeložit chybovou hlášku přitom jsem měl konkrétní dotaz na jejím základě.. Nikdo už však jak problém vyřešit. Mám deklarovat proměnnou zvenku cyklu? Nebo mám použít jiný cyklus?

 
Nahoru Odpovědět
9.12.2013 10:17
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na dolakdavid
David Hartinger:9.12.2013 10:22

Když někde použiješ blok ze složených závorek, zavedeš s ním tzv. scope, což je prostor s proměnnými. Ze scope je vždy vidět do venkovního scope, ale zvenku nevidíš dovnitř. Je to tak abys nemusel mít v celé metodě unikátní názvy proměnných. Dělají to tak všechny cykly i podmínky.

Pokud chceš mít nějakou proměnnou ze scope mimo cyklus přístupnou v cyklu nebo naopak použít proměnnou z cyklu po jeho dokončení, musíš ji deklarovat před cyklem.

Nahoru Odpovědět
9.12.2013 10:22
You are the greatest project you will ever work on.
Avatar
coells
Tvůrce
Avatar
Odpovídá na dolakdavid
coells:9.12.2013 10:36

Měl jsi konkrétní dotaz, proč to nechce VS sežvýkat - a na ten jsi dostal odpověď. Kód se dá opravit spoustou možných způsobů. Namátkově:

static void Main(string[] args)
{
    int cislo = new Random().Next(0, 101), tip;
    Console.WriteLine("Myslím si číslo od 1 do 100, uhodnes ho? Zadej svůj tip a stiskni enter");

    do {
        tip = Convert.ToInt32(Console.ReadLine());
        if (tip > cislo) Console.WriteLine("Číslo je menší");
        else if (tip < cislo) Console.WriteLine("Číslo je větší");
    } while (tip != cislo);

    Console.WriteLine("Hurá! Uhodl jsi! Stisknutím libovolné klávesi ukončíš program.");
    Console.ReadKey();
}

Nebo

static void Main(string[] args)
{
    int cislo = new Random().Next(0, 101);
    Console.WriteLine("Myslím si číslo od 1 do 100, uhodnes ho? Zadej svůj tip a stiskni enter");

    while (true) {
        int tip = Convert.ToInt32(Console.ReadLine());
        if (tip > cislo) Console.WriteLine("Číslo je menší");
        else if (tip < cislo) Console.WriteLine("Číslo je větší");
        else break;
    }

    Console.WriteLine("Hurá! Uhodl jsi! Stisknutím libovolné klávesi ukončíš program.");
    Console.ReadKey();
}

Nebo také

static void Main(string[] args)
{
    int cislo = new Random().Next(0, 101), tip;
    Console.WriteLine("Myslím si číslo od 1 do 100, uhodnes ho? Zadej svůj tip a stiskni enter");

    while ((tip = Convert.ToInt32(Console.ReadLine())) != cislo)
    {
        if (tip > cislo) Console.WriteLine("Číslo je menší");
        else if (tip < cislo) Console.WriteLine("Číslo je větší");
    }

    Console.WriteLine("Hurá! Uhodl jsi! Stisknutím libovolné klávesi ukončíš program.");
    Console.ReadKey();
}
 
Nahoru Odpovědět
9.12.2013 10:36
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 8 zpráv z 8.