Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C#: Pieni ongelma

AtskaFin [16.02.2019 10:49:37]

#

Satuin törmäämään ohjelmoidessani seuraavanlaiseen ongelmaan: minulla on while loop, joka loppuu kun esiintyy komento break;.

while(true)
{
   string komento = Console.ReadLine();

   if(komento == "lopeta") break;
}

Ohjelmassa voi antaa komennon ja switch -rakenne käy vaihtoehdot läpi. Mutta huomasin, että switch rakenteeseen en voi sijoittaa break; komentoa.

while(true)
{
   string komento = Console.ReadLine();

   switch(komento)
   {
      case "lopeta":
         break; //tämän pitäisi lopettaa while -loop
         break; //tämän taas pitäisi lopettaa case "lopeta".
   }
}

Siis tuollalailla ei voi tehdä, että on kaksi break; komentoa. Siis voihan tämän helposti tehdä tuon if -lauseen sisään, mutta kiinnostaisi onko mahdollista saada jotenkin sijoitettua tuonne switchiin.

Grez [16.02.2019 10:59:15]

#

AtskaFin kirjoitti:

huomasin, että switch rakenteeseen en voi sijoittaa break; komentoa.

Voithan, se poistuu sieltä switch-rakenteesta. break-komentoi poistuu aina itseään lähimmästä rakenteesta, jossa voi käyttää breakia.

Sinänsä ihan sama tilanne on minkä tahansa muunkin rakenteen kanssa, josta halutaan poistua breakilla: Voit poistua vain yhden tason

Itse varmaan tekisin niin että tuon lopeta-tapauksen pitäisin erikseen if:nä tai sitten laittaisin koko while-loopin funktioksi ja poistuisin siitä kokonaan.

Yksi vaihtoehto on myös että teet totuusarvon (boolean muuttuja), mutta mielestäni tämä on huonompi kuin edelliset.

Sinänsä jos ihan välttämättä haluat poistua useramman breakin kerralla niin käsky on nimeltään goto, mutta en suosittele käyttämään sitä. (Ja goton mainitsemisestakin sit varmaan tulee vihaviestejä minullekin..)

    while (true)
    {
        string komento = Console.ReadLine();

        switch (komento)
        {
            case "lopeta":
                goto lopeta;
            case "heippa":
                Console.WriteLine("No moro moro");
                break;
        }
    }
lopeta:
    { }

Jaska [16.02.2019 13:06:01]

#

Tässä eri tapoja lopettaa kaksoissilmukka: https://stackoverflow.com/questions/982595/how-to-break-out-of-2-loops-without-a-flag-variable-in-c

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta