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í.
Avatar
Mentee
Člen
Avatar
Mentee:26.6.2017 19:31

Ahoj, prosím, mohl byste mi někdo vysvětlit, co je na tomto zápisu špatně?
I po zadání správného vstupu(B nebo D), se vykonává stále příkaz z do.

string volba="";
do
      {
         volba = Console.ReadLine();
      }
while (volba != "B" || volba != "D");
Editováno 26.6.2017 19:32
Odpovědět
26.6.2017 19:31
Do something. If it does not work, do something else. Nothing is too crazy!
Avatar
Odpovídá na Mentee
Wal De Mar-Lad:26.6.2017 19:42

Ten cyklus je plne v poriadku, naozaj je nekonečný. Len si musíš krok po kroku skúsiť uvedomiť prečo. A ak si zo nevieš prebrať, nevadí, proste si zapämataj, že takto to nefunguje. Keď tak, radšej si urob funkciu v ktorej čítaš vstup a podmienku, že ak načítaný znak nie je B, alebo D, tak nech tá funkcia rekurzívne volá sama seba.

Nahoru Odpovědět
26.6.2017 19:42
Libraries over frameworks...
Avatar
plelovsky
Člen
Avatar
plelovsky:26.6.2017 19:48

Podmínka v závorce je vždycky splněná. Když platí volba == "B", tak platí volba != "D" a naopak.
Pokud se cyklus má ukončit při zadání "B" nebo "D", tak podmínka bude

while (!(volba == "B" || volba == "D"))
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
26.6.2017 19:48
Avatar
Odpovídá na Wal De Mar-Lad
Wal De Mar-Lad:26.6.2017 19:50

PS: A ak chceš silou mocou použiť cyklus, tak skôr takto:

string volba = "";
while (volba = Console.ReadLine()) {
  if (volba = "B" || volba = "D") break;

Ale neskúšal som to. Ja ani neviem pre aký jazyk sa to pýtaš, toto je doslova generický kód. Ikeď vyzerá to ako Java...

Nahoru Odpovědět
26.6.2017 19:50
Libraries over frameworks...
Avatar
Shade
Člen
Avatar
Shade:26.6.2017 20:00

Pokud zadáš B => ( FALSE || TRUE) => NEBO TRUE. Tím pádem stále poběží.

Vyřešil bys to například (volba != "B" && volba !="D")

Pokud zadáš B => (FALSE && TRUE) = > (FALSE a TRUE) = FALSE

Je to opravdu matoucí :D

Nahoru Odpovědět
26.6.2017 20:00
Talk is cheap. Show me the code.
Avatar
zelvicek
Člen
Avatar
zelvicek:26.6.2017 20:09

Problém je už vyřešen. Přesto bych rád tazateli ukázal "fígl" pro příště.

string volba="";
bool pokracovat,pokracovatB,pokracovatD;
do
      {
         volba = Console.ReadLine();

         pokracovatB = volba != "B";
         pokracovatD = volba != "D";
         pokracovat = pokracovatB || pokracovatD;
      }
while (pokracovat);

Pokud budeš kód krokovat/debugovat, jasně se ukáže problém ve špatně zapsané podmínce.

 
Nahoru Odpovědět
26.6.2017 20:09
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.