Tylko cyfry za pomocą parse i while oraz powtórzenie programu.

0

Cześć.
Potrzebuję wzoru na deklarację, że po wpisaniu przez użytkownika litery program się nie wysypie oraz, żeby na koniec zapytało,czy użytkownik chce zrobić wszystko od nowa, czy nie.
Gotowe wzory, bardzo proszę i z góry dziękuję ;)

0

Pokaż co próbowałeś zrobić a może znajdzie się jakaś rada. Tak na wstępie to ci mogę powiedzieć ,że zrobisz to za pomocą prostej pętli i TryParse. Ale nic więcej bez twojej inicjatywy ci nie pomogę.

0

@Botek:
Np. tak mam dla liczenia delty (tylko początek) i nie wiem jak zagwarantować, żeby tam jak wpiszę literę to się nie sypało.

public static double a, b, c, d, wynik_delta, x1, x2;
        public static void wprowadz()
        {
            Console.WriteLine("Podaj współczynniki równania kwadratowego \n");
            a = 0;
            
            while (a == 0)
            {
                Console.Write("a: ");
                a = double.Parse(Console.ReadLine());
                Console.Write("b: ");
                b = double.Parse(Console.ReadLine());
                Console.Write("c: ");
                c = double.Parse(Console.ReadLine());
                if (a == 0)
                    Console.WriteLine("Błąd! Współczynnik funkcji kwadratowej nie może wynosić 0!");
            }
1

jest taka metoda TryParse

0

Łap wyjątek z TryParse, i w zależności, co Chcesz zrobić, zakończyć program, czy wrócić do czytania danych.

3
            int number;
            bool correctNumber;

            do
            {
                string value = Console.ReadLine();
                correctNumber = int.TryParse(value, out number);
                if (!correctNumber) Console.WriteLine("Musi być liczba");

            } while (!correctNumber);

Nie wiem w czym tu był problem ale ,jako ,że już coś próbowałeś to taki krótki fragment mogę ci podrzucić.

Albo nawet krócej:

            int number;
            while (!int.TryParse(Console.ReadLine(), out number))
                Console.WriteLine("Musi być liczba");

Gdy nie potrzebny jest komunikat

            int number;
            while (!int.TryParse(Console.ReadLine(), out number)) ;
0

Problem był w różnicy pomiędzy działaniem metody Parse, a TryParse.
w przypadku niemożliwości parsowania Parse wyrzuca błąd którego obsługa wymaga bloku Try-catch.
TryParse gdy nie ma możliwość przeprasowania zadanej wartości zwraca Null Edit: false

@lion137 TryParse nie zwraca wyjątków :)

0

@Botek: super, ale kurczę muszę zrobić tak, że sprawdzam każdy z 3 elementów i dodatkowo sprawdzić czy nie jest to zero. Z tego co wiem to będzie musiała być pętla zagnieżdżona, a nwm jak to zrobić. Dodatkowo nie mogę zadeklarować var dla każdego z podanych współczynników.
Mam tak, ale nie działa. Tu brakuje jeszcze, żeby sprawdzało i a i b i c i jednocześnie tylko czy a nie jest równe 0.

            a = 0;
            b = 0;
            c = 0;

            bool Correct;
            do
            {
                while (a == 0)
                {
                    Console.Write("a: ");
                    string value = Console.ReadLine();
                    Correct = double.TryParse(value, out a);
                    if (a == 0)
                        Console.WriteLine("Błąd! Współczynnik funkcji kwadratowej nie może wynosić 0!");
                    Console.Write("b: ");
                    b = double.Parse(Console.ReadLine());
                    Console.Write("c: ");
                    c = double.Parse(Console.ReadLine());
                    Console.ReadLine();
                    if (!Correct) Console.WriteLine("To musi być liczba");
                } while (!Correct) ;
            }
        }
2

@xtml_:

W takim razie użyj 3 pętli :)

       int a, b, c;

            while (!int.TryParse(Console.ReadLine(), out a) || a == 0)
                Console.WriteLine("Błąd! Współczynnik funkcji kwadratowej musi być liczbą różną od zera");
            while (!int.TryParse(Console.ReadLine(), out b))
                Console.WriteLine("To musi być liczba");
            while (!int.TryParse(Console.ReadLine(), out c))
                Console.WriteLine("To musi być liczba");

Jeśli potrzebujesz mieć osobne błędy to:

            int a, b, c;

            for (bool check=int.TryParse(Console.ReadLine(), out a);
                  !check || a == 0; 
                  check = int.TryParse(Console.ReadLine(), out a))
            {
                if (check)
                    Console.WriteLine("Błąd! Współczynnik funkcji kwadratowej nie może wynosić 0!");
                else
                    Console.WriteLine("To musi być liczba");
            }
            while (!int.TryParse(Console.ReadLine(), out b))
                Console.WriteLine("To musi być liczba");
            while (!int.TryParse(Console.ReadLine(), out c))
                Console.WriteLine("To musi być liczba");

0

@Botek: No i śmiga :) Bardzo Ci dziękuję za pomoc!

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