Warunki do zmiennej wprowadzanej przez użytkownika

0

Witajcie,
problem jest tego typu że chciałem dodać warunki do wporwadzanej zmiennej żeby mi się program nie sypał ale zatrzymałem się na w tym punkcie i nie wiem co dalej.
Pomoże ktoś?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zadanie13
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] tab = new int[500];
            int b = 0;
            for (int i = 0; i < 499; i++)
            {
                while (true)
                {
                    Console.WriteLine("Podaj liczbę: ");
                    tab[i] = int.Parse(Console.ReadLine());
                    try
                    {
                        int  = int.Parse(i);
                        break;
                    }
                    catch (FormatException)
                    {
                        Console.WriteLine("Wprowadzono liczbę w złym formacie");
                    }
                    catch (OverflowException)
                    {
                        Console.WriteLine("Wprowadzona liczba jest poza dopuszczalnym zakresem");
                    }
                    catch (ArgumentNullException)
                    {
                        Console.WriteLine("Napotkano koniec strumienia");
                    }
                    Console.WriteLine("Spróbuj jeszcze raz");
                }
                tab[i] = int.Parse(Console.ReadLine());
                b += tab[i];
                if (tab[i] == 0)
                {
                    Console.WriteLine("Suma liczb wpisanych wynosi: " + b);
                    Console.ReadKey();
                    return;
                }
            }
        }
    }
}
0
int  = int.Parse(i); // W bloku try {}

Brak jakiejkolwiek nazwy zmiennej, poza tym i już jest typu int - po co zatem `int.Parse() (która przyjmuje zmienne typu string)?

1

uzyj int.TryParse

1

tab[i] = int.Parse(Console.ReadLine());

Używanie Parse w sytuacjach niewyjątkowych należy srogo tępić. Nie wspominając już o tym, że ludzie często nie wiedzą jak tego używać, ponieważ przykładowo tutaj nawet nie ma obsługi wyjątku dla nieprawidłowych wartości.

Poprawka: Parse występuje tutaj dwa razy i ani razu nie jest w bloku try.
Pomyłka przy wprowadzaniu danych nie jest sytuacją wyjątkową.

Tak jak napisał mój przedmówca: TryParse Twoim przyjacielem.

Zobacz ile możesz sobie uprościć życie:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _4p
{
    class Program
    {
        static int ReadInt()
        {
            int result = 0;
            while (!int.TryParse(Console.ReadLine(), out result))
                Console.Write("Not a number! Pleasy try again: ");
            return result;
        }

        static void Main(string[] args)
        {
            Console.Write("How many numbers? ");
            var count = ReadInt();
            var numbers = new int[count];
            for (int i = 0; i < numbers.Length; i++)
            {
                Console.Write($"Please give me number {i + 1}:");
                numbers[i] = ReadInt();
            }
            Console.WriteLine($"Sum: {numbers.Sum()}");
        }
    }
}

Dobrze byłoby jeszcze zadbać o to żeby rozmiar tablicy był zawsze większy od zera ale zobacz, nie potrzebujesz tutaj żadnych wyjątków. Możesz napisać metodę np.: ReadUnsigned, która zawsze zwróci Ci liczbę większą od zera. Pobaw się.

Poza tym każesz użytkownikowi wprowadzić 500 liczb z palca. Przecież to można umrzeć z nudów :)

0

Ok, teraz rozumiem. Mam jeszcze pytanie odnośnie liczb ujemnych. Jaki na to jest sposób i jak mogę go wrzucić w tą metodę?

1

Jeśli się nie mylę to:
int.TryParse() - wszystko co jest prawidłowe dla int (czyli ujemne i dodatnie)
uint.TryParse() - wszystko co jest prawidłowe dla uint (tylko dodatnie)

0

Mam jeszcze pytanie odnośnie liczb ujemnych. Jaki na to jest sposób i jak mogę go wrzucić w tą metodę?

Metoda ReadInt, którą napisałem działa również dla liczb ujemnych gdyż parsuje liczby całkowite ze znakiem czyli Signed integer. Trochę nie rozumiem pytania.

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