Wpisywanie liczb z klawiatury do tablicy - powtarzanie czynności, jeśli podano błędną wartość

0

witam
Chciałem się zapytać jak w poniższym kodzie zrobić aby w pętli while warunek był jeśli element z tablicy wpisany nie jest liczbą wprowadź liczbe ponownie:

 namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] tab = new int[8];
            List<int> list = new List<int>();
           
            for (int i = 0; i < tab.Length; i++)
            {
                Console.Write("Wprowadz " + (i+1) + " liczbę");
                tab[i] = int.Parse(Console.ReadLine());
                while(bool.Parse(tab[i].ToString) = true)//chodzi mi o tą pętlę jak zapisać warunek aby po wprowadzeniu jakiegoś innego znaku niż typu int trzeba było wpisać go ponownie aż wpisze się liczbę
                {
                    Console.WriteLine("nie wpisano prawidłowej liczby\nPodaj liczbę jeszcze raz");
                    tab[i] = int.Parse(Console.ReadLine());
                }
            }
            foreach(int liczba in tab)
            {
                Console.WriteLine(liczba +" ");
            }
            Console.ReadLine();
            Console.WriteLine(tab[3]);

            Console.ReadLine();

        }
    }
}
1

Możesz wykorzystać metodę Int32.TryParse, która zwraca wartość logiczną, określającą czy konwersja się powiodła, czy nie; Temat był już wiele razy poruszany - skorzystaj z wyszukiwarki forum i Google;

bool result = Int32.TryParse(Console.ReadLine(), out tab[i]);

while(!result){
  // komunikat o podaniu liczby z klawiatury
  result = Int32.TryParse(Console.ReadLine(), out tab[i]);
}

Kod nie sprawdzany, ale powinien działać.

0

zamieniłem na takie coś i dalej błąd

while(Int32.TryParse(tab[i]) = true) 
0

ile razy byś nie powtarzał operacji na tej samej danej, to wynik dostaniesz taki sam.

0

Dopisałem kod do swojego poprzedniego posta; Może coś w tym stylu, skoro już chcesz minimalizować kod:

while(!Int32.TryParse(Console.ReadLine(), out tab[i])){
  // komunikat o błędnie wprowadzonej liczbie
}

Coś na MSDN widzę ze słówkiem out - pokombinuj i czytaj dokumentację;


zamieniłem na takie coś i dalej błąd

while(Int32.TryParse(tab[i]) = true)

Po pierwsze - operator równości w C# to ==, a po drugie nie trzeba w ogóle porównywać do true lub false - w przypadku true pozostawia się warunek bez porównania, a w przypadku false stosuje się operator negacji przed wyrażeniem.

0

aha a czy można to zapisać za pomocą np. try i catch ponieważ teraz staram się napisać ale mi nie wychodzi

0

@kamciono5 - myśl trochę; Po to zaproponowałem Ci metodę TryParse, aby w przypadku błędu konwersji nie był rzucany wyjątek; Jak rajcuje Cię łapanie i obsługa wyjątków dla tak fundamentalnych operacji, to nadal korzystaj z metody Parse, tyle że w bloku try; Jednak pakowanie selektywnej obsługi wyjątków wszędzie tam, gdzie się da jest złym pomysłem.

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