Używanie while if

0

Uczę się z tutoriali na yt, jestem na filmiku nr. 14

Na górze jest kod przepisany z filmiku, na dole przeze mnie.

Przy próbie skomplilowania kodu przepisanego wyskakuje bład, a przy klamerce świeci się czerwone podkreślenie. Mój poprawiony działa dobrze, po tym jak dodałem

while (takczynie == "YES" && takczynie == "NO") ;

Ale jak chce usunąć

while (takczynie != "YES" && takczynie != "NO") ;

wyskakuje już błąd z podkreśloną Klamrą.

Mam dwa pytania:

  • Dlaczego na filmiku działa, mimo użycia !=, zamiast ==, a u mnie po naciśnięciu enter program się blokuje?
  • Dlaczego po usunięciu while (takczynie != "YES" && takczynie != "NO") ; występuje bład przy klamrze?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {


            string takczynie = string.Empty;
            do
            {
                Console.WriteLine("prosze nacisnij swoj cel");
                int UserTarger = int.Parse(Console.ReadLine());
                int Start = 0;
                while (Start <= UserTarger)
                {
                    Console.Write(Start + " ");
                    Start = Start + 2;
                }
                do
                {
                    Console.WriteLine("Czy chcesz kontyunować?");

                    takczynie = Console.ReadLine().ToUpper();

                    if (takczynie != "TAK" && takczynie != "NIE")
                    {
                        Console.WriteLine("zły wybór, napisz Tak lub Nie");
                    }

                   while (takczynie != "TAK" && takczynie != "NIE");
                }
           while (takczynie == "TAK");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {


            string takczynie = string.Empty;
            do
            {
                Console.WriteLine("prosze nacisnij swoj cel");
                int UserTarger = int.Parse(Console.ReadLine());
                int Start = 0;
                while (Start <= UserTarger)
                {
                    Console.Write(Start + " ");
                    Start = Start + 2;
                }
                do
                {
                    Console.WriteLine("Czy chcesz kontyunować?");

                    takczynie = Console.ReadLine().ToUpper();

                    if (takczynie != "TAK" && takczynie != "NIE")
                    {
                        Console.WriteLine("zły wybór, napisz Tak lub Nie");
                    }
                    while (takczynie == "TAK" && takczynie == "NIE") ;
                }
                while (takczynie != "TAK" && takczynie != "NIE");
            }
               while (takczynie == "TAK");
        }
    }
}
9

Pętla do while wygląda następująco:

do
{
	 //kod
} while (warunek);

Zatem w wersji ConsoleAplication10 masz pętlę zawnętrzną:

do
{
                Console.WriteLine("prosze nacisnij swoj cel");
                int UserTarger = int.Parse(Console.ReadLine());
                int Start = 0;
                while (Start <= UserTarger)
                {
                    Console.Write(Start + " ");
                    Start = Start + 2;
                }
               
} while (takczynie == "TAK");

Wewnątrz pętlę:

do {
                Console.WriteLine("Czy chcesz kontyunować?");

                takczynie = Console.ReadLine().ToUpper();

                if (takczynie != "TAK" && takczynie != "NIE") {
                    Console.WriteLine("zły wybór, napisz Tak lub Nie");
                }
                while (takczynie == "TAK" && takczynie == "NIE");
} while (takczynie != "TAK" && takczynie != "NIE");

Oraz pętlę while,której zakres jest jak niżej (jedna linia) i która robi coś bezsensownego, bo ten warunek NIGDY nie będzie spełniony (czyli równie dobrze możesz to usunąć, bo to totalna bzdura):

while (takczynie == "TAK" && takczynie == "NIE");

Dlaczego po usunięciu
while (takczynie != "YES" && takczynie != "NO") ;
występuje bład przy klamrze?
bo taka jest składnia patrz do while wyżej.

0

Musisz dopisać while(), aby zamknąć blok do...while().
Zobacz, że masz coś takiego:

do
{
}//brak while()
(takczynie == "TAK" && takczynie == "NIE")

Ten warunek blokuje program, ponieważ takczynie nie może zawierać jednocześnie "TAK" i "NIE". Musisz sprawdzić, czy jest to różne od "TAK" i różne od "NIE".

1 użytkowników online, w tym zalogowanych: 0, gości: 1