Błąd przy wprowadzaniu danych w C#

0

Witam!
Proszę jeśli wiecie czemu jak wprowadzam np. "asd" to nie sprawdza mi, że to tekst.
Sprawdzanie i wprowadzanie danych są tak jakby w dwóch różnych blokach, które ze sobą nie współgrają. Jak to połączyć aby działało sprawdzanie poprawności danych?

using System;
using System.IO;

namespace Prawidłowy_wzor
{
    class Program
    {
        static void WriteLineErrorMessage(string Message)
        {
            ConsoleColor PreviousForegoundColor = Console.ForegroundColor;
            Console.ForegroundColor = ConsoleColor.DarkRed;
            Console.WriteLine(Message);
            Console.ForegroundColor = PreviousForegoundColor;
        }
        static float ReadFloatNumber(string Message)
        {
            int Result;
            string Wejscie;
            while (true)
            {
                //string Wejscie;
                Console.Write(Message);
                #region Próba odczytu wiersza z konsoli
                try
                {
                    Wejscie = Console.ReadLine();
                }
                catch (OutOfMemoryException e)
                {
                    WriteLineErrorMessage("Brak pamięci operacyjnej.\nProgram zostanie zakończony");
                    throw e;
                }
                catch (IOException e)
                {
                    WriteLineErrorMessage("Krytyczny błąd wejścia/wyjścia.\nProgram zostanie zakończony");
                    throw e;
                }
                #endregion
                #region Konwersja wczytanych danych
                try
                {
                    Result = int.Parse(Wejscie);
                    break;
                }
                catch (FormatException)
                {
                    WriteLineErrorMessage("Wprowadzono liczbę w złym formacie");
                }
                catch (OverflowException)
                {
                    WriteLineErrorMessage("Wprowadzona liczba jest poza dopuszczalnym zakresem");
                }
                catch (ArgumentNullException) // ^Z
                {
                    WriteLineErrorMessage("Napotkano koniec strumienia");
                }
                Console.WriteLine("Błędne dane, wprowadź ponownie");
                #endregion

            }
            return Result;
            }
        
        static void Main(string[] args)
        {
            
            #region Ustawienie parametrów konsoli
            Console.BackgroundColor = ConsoleColor.Blue;
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.Clear();
            #endregion

            string Dane;
            
            #region Wprowadzenie liczby Dane
            Console.WriteLine("Podaj liczbę");
            Dane = Console.ReadLine();
            #endregion

            int liczba;
            liczba = int.Parse(Dane);
            //liczba = int.Parse(Wejscie);
            // int liczba = Dane;

            //Obliczenia

            int reszta;                         //Reszta to wynik działania liczba % 10
            int suma = 0;
            while (liczba > 0)
            {
                reszta = liczba % 10;
                suma = suma + reszta;
                liczba = liczba / 10;
            }
            Console.WriteLine("Suma rozwinięcia dziesiętnego wynosi: " + suma);
            Console.ReadLine();
                    
        }
    }
} 
0

Yyy chodzi Ci o wywołanie metody?

ReadFromNumber("jakiś string");
0

Chodzi mi o to, że jak nacisnę F5 i uruchomię program i wpiszę np. asd to wywala błąd, jak podam np. 567 to wyliczy poprawnie wynik. Wiem, że faktycznie wprowadzam Dane i przekazuję je na liczba a sprawdzanie jest wprowadzane przez Wejscie i przekazywane na Result.

0

Brawo ale nigdzie nie wywołujesz ReadFromNumber a tam jest jakieś sprawdzanie.
Poza tym w tej metodzie posługujesz się float a w mainie int, jednym słowem nigdzie nie sprawdzasz poprawności wprowadzonych danych.

Używanie metod:

static void Main(string[] args)
{
    Console.WriteLine("Jestem w main");
    WypiszLiczbe(5);
    Console.ReadKey();
}
static void WypiszLiczbe(int liczba)
{
  Console.WriteLine("Wypisuje liczbę "+liczba);
}
0

Widzę te dwa różne typy. Ale jak i w którym miejscu dokonać wywołania. (Jestem świeży jak szczypiorek na wiosnę z tego C#). Pewnie będą się kłóciły ze sobą (te dwa typy) i trzeba będzie coś przekonwertować?
Dzięki za podpowiedź.
Teraz wywołuje sprawdzanie ale nie do końca, ponieważ nie przekazuje danych pomiędzy blokami.

using System;
using System.IO;

namespace Prawidłowy_wzor
{
    class Program
    {

        static void WriteLineErrorMessage(string Message)
        {
            ConsoleColor PreviousForegoundColor = Console.ForegroundColor;
            Console.ForegroundColor = ConsoleColor.DarkRed;
            Console.WriteLine(Message);
            Console.ForegroundColor = PreviousForegoundColor;
        }
        static float ReadFloatNumber(string Message)
            
        {
            int Result;
            string Wejscie;
            while (true)
            {
                //string Wejscie;
                //Console.Write(Message);
                #region Próba odczytu wiersza z konsoli
                try
                {
                    Wejscie = Console.ReadLine();
                }
                catch (OutOfMemoryException e)
                {
                    WriteLineErrorMessage("Brak pamięci operacyjnej.\nProgram zostanie zakończony");
                    throw e;
                }
                catch (IOException e)
                {
                    WriteLineErrorMessage("Krytyczny błąd wejścia/wyjścia.\nProgram zostanie zakończony");
                    throw e;
                }
                #endregion
                #region Konwersja wczytanych danych
                try
                {
                    Result = int.Parse(Wejscie);
                    break;
                }
                catch (FormatException)
                {
                    WriteLineErrorMessage("Wprowadzono liczbę w złym formacie");
                }
                catch (OverflowException)
                {
                    WriteLineErrorMessage("Wprowadzona liczba jest poza dopuszczalnym zakresem");
                }
                catch (ArgumentNullException) // ^Z
                {
                    WriteLineErrorMessage("Napotkano koniec strumienia");
                }
                Console.WriteLine("Błędne dane, wprowadź ponownie");
                #endregion

            }
            return Result;
//            Dane = Wejscie;
        }

        static void Main(string[] args)
        {
        
            #region Ustawienie parametrów konsoli
            Console.BackgroundColor = ConsoleColor.Blue;
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.Clear();
            #endregion

            string Dane;

            #region Wprowadzenie liczby Dane
            Console.WriteLine("Podaj liczbę");
            Dane = Console.ReadLine();
            #endregion

            int liczba;

           ** ReadFloatNumber(Dane);**

            liczba = int.Parse(Dane);

            //Obliczenia

            int reszta;                         //Reszta to wynik działania liczba % 10
            int suma = 0;
            while (liczba > 0)
            {
                reszta = liczba % 10;
                suma = suma + reszta;
                liczba = liczba / 10;
            }
            Console.WriteLine("Suma rozwinięcia dziesiętnego wynosi: " + suma);
            Console.ReadLine();
        }
    }
}
 
0

Te "bloki" to są metody.
Metoda może też zwracać dane:

static void Main(string[] args)
{
    Console.WriteLine("Jestem w main");
    int liczba;    
    liczba = PobierzLiczbe();
    WypiszLiczbe(liczba);
    Console.ReadKey();
}
static int PobierzLiczbe()
{
   string str = Console.ReadLine();
   int liczba = int.Parse(str);
   return liczba;
}
static void WypiszLiczbe(int liczba)
{
  Console.WriteLine("Wypisuje liczbę "+liczba);
}

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