Wątek przeniesiony 2015-12-12 18:26 z C# i .NET przez somekind.

sprawdzanie string-a - kłopot początkującego

0

Witam
Zaczynam się uczyć i potrzebuję małej podpowiedzi ;)
Dlaczego taki kod działa :

namespace qwhile
{
    class Program
    {
        static void Main(string[] args)
        {
            string a;
            do
            { Console.WriteLine("Podaj znak + lub - :");
                 a = Console.ReadLine();
            }
            while (a == "+" || a =="-");

            Console.WriteLine("okk");
            Console.ReadLine();

        }
    }
} 

a taki już nie :?

namespace qwhile
{
    class Program
    {
        static void Main(string[] args)
        {
            string a;
            do
            { Console.WriteLine("Podaj znak + lub - :");
                 a = Console.ReadLine();
            }
            while (a != "+" || a !="-");

            Console.WriteLine("okk");
            Console.ReadLine();

        }
    }
} 

Chodzi oczywiście o warunek WHILE, jak zrobić by pierwszy przykład działał ?
Proszę o naprowadzenie w odpowiednim kierunku ;)

0

Piszesz, że pierwszy kod działa, a potem pytasz jak zrobić by pierwszy przykład działał....

0

sorki ;)
oczywiście jak zrobić by drugi działał ;)
pętla ma się wykonywać dopóki 'a' jest różny od '+' lub '-'

1

Na pewno chodzi Ci o różny od + LUB - czy + I - ?

2

Nie działa, ponieważ w drugiej pętli masz nieprawidłowy warunek. Powinno być:

while (a != "+" && a != "-");

A chodzi główne o różnicę przy operacji and oraz or przy jednoczesnym zastosowaniu operatorów porównania.

0

chodzi o to by pętla wykonywała się tak długo jak długo użytkownik nie wpisze znaku '+' LUB znaku '-'

1

Rzecz w tym, że tutaj musi być &&, ponieważ z operatorem || pętla wykona się jeżeli tylko jeden z warunków będzie spełniony i nawet jeżeli wciśniesz + to i tak wpadniesz w kolejną iterację, bo wynikiem operacji będzie logiczna jedynka.

3

Do warunku: a != "+" || a !="-" pasuje każda wartość a zawsze albo nie równa "+" albo nie równa "-".

0

dzięki grzesiek51114
działa
choć nie do końca rozumiem czemu ;)

edit:
dzięki za wytłumaczenie ;) !!!

1

Działa, bo zastosowany został odpowiedni operator, popatrz tabela niżej oraz to co napisałem ja wraz z @_13th_Dragon.

&&	Iloczyn logiczny - wszystkie wartości muszą być prawdziwe, aby została zwrócona prawda.
||	Suma logiczna - co najmniej jedna z wartości musi być prawdziwa, aby została zwrócona prawda.
!	 Zanegowanie wartości - czyli zwrócenie wartości przeciwnej.

Po prostu operator || w Twoim zastosowaniu daje w wyniku zawsze true.

Tutaj masz więcej i choć to C++ to możesz też stosować w C# http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Operacje-logiczne/15

2
danielg28 napisał(a):

... choć nie do końca rozumiem czemu ;)

W while podajesz warunek kontynuacji. Nie jest to + oraz nie jest to minus. Można to samo zapisać while(!(a=="+" || a =="-")) - czyli zatrzymaj jeżeli równe + lub równe -.

To zaś: !(a=="+" || a =="-") jest tym samym co a!="+" && a !="-" - szukaj w google prawo DeMorgana

1

Taka w sumie ciekawostka: Jeżeli chcesz badać tylko jeden znak char to możesz użyć własności KeyChar z tym, że metoda Readkey() nie czeka na znak Enter:

        char character = ' ';
        do {
            Console.Write("\nPressed key: ");
        } while ((character = Console.ReadKey().KeyChar) != 'q');

Dobre do programowania jakichś ruchów w prostych grach tekstowych takich jak jakieś tam snejki czy tetris chociażby.

0

oki
dziękuję BARDZO za wszystkie odpowiedzi i naprawdę szacun dla ludzi tu piszących ;)
z reguły przy pytaniach tak podstawowych na forach rzucają - google lub wyszukiwarka ci to powie, a tutaj .... niespodzianka, szybkie i konkretne odpowiedzi z dodatkowymi podpowiedziami.
naprawdę dzięki

zapewne przy nauce jeszcze się wiele razy zagubię więc już wiem gdzie szukać pomocy
Pozdrawiam
Daniel

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