Diskuze: Deklarace proměné uvnitř cyklu - chyba?

C# .NET .NET (C# a Visual Basic) Deklarace proměné uvnitř cyklu - chyba? American English version English version

Avatar
dolakdavid
Člen
Avatar
dolakdavid:

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ý
Redaktor
Avatar
Odpovídá na dolakdavid
Jan Vargovský:

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

 
Nahoru Odpovědět 9.12.2013 0:37
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na dolakdavid
Jan Vargovský:

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

 
Nahoru Odpovědět  +1 9.12.2013 0:44
Avatar
Milan Křepelka
Redaktor
Avatar
Odpovídá na dolakdavid
Milan Křepelka:

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  +1 9.12.2013 8:17
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Milan Křepelka
Jan Vargovský:

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:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na dolakdavid
David Čápka:

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  +1 9.12.2013 10:22
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
coells
Redaktor
Avatar
Odpovídá na dolakdavid
coells:

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  +1 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.