Jak zablokować wpisywanie liter ?

0

Witam.

Mam takie uprzejme zapytanie czy jest jakiś taki w miarę prosty kod umożliwiający zablokowanie wprowadzania liter w aplikacji konsolowej...

Poniżej podaje kod który już mam:

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

namespace Horner_Consola
{
    class Program
    {
        static void Main    (string[] args)
        {
            Start:
            int n;
            Console.WriteLine("Podaj stopień wielomioanu: "); 
            n = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine();

            if (n > 10)
            {
                Console.WriteLine("Zbyt duża wartość stopnia wielomianu (1-10)");
                Console.WriteLine();
                goto Start;
            }
            if (n == 0)
            {
                Console.WriteLine("Wartość wielomianu nie może być 0 ");
                Console.WriteLine();
                goto Start;
            }
 

Dzięki za pomoc

0

ReadKey w pętli zamiast ReadLine i wczytywanie po jednym znaku. musisz wtedy obsłużyć wypisywanie znaków oraz backspace i enter.

0

Można i tak:

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

namespace Horner_Consola
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            while (true)
            {     
                Console.WriteLine("Podaj stopień wielomioanu: ");
                if (!int.TryParse(Console.ReadLine(), out n))
                {
                    Console.WriteLine("Wpisałeś nieprawidłową wartość");
                    continue;
                }

                Console.WriteLine();

                if (n > 10)
                {
                    Console.WriteLine("Zbyt duża wartość stopnia wielomianu (1-10)");
                    Console.WriteLine();
                    continue;
                }
                else if (n == 0)
                {
                    Console.WriteLine("Wartość wielomianu nie może być 0 ");
                    Console.WriteLine();
                    continue;
                }
            }
        }
    }
}

Nie używaj goto, lepiej pętlą.

0

A mam jeszcze jedno pytanie czy rację bytu miał by taki kod w blokowaniu wpisywania liter:

 
try
  { 
     int n = int.TryParse(Console.ReadLine(); 
  } 
catch 
  { 
      Console.WriteLine("Wpisałeś nieprawidłową wartość");
  }

Nie wiem czy dobrze to zapisałem ale staram się znaleźć jak najprostsze rozwiązanie...

0

jak masz blok try i catch, to już nie musisz dawać TryParse. Startczy Parse.

edit: z tego co widzę w dokumentacji to TryParse w ogóle nie zwraca typu int, tylko bool, czy sie udało, więc jest w ogóle bez sensu.

0
int n;
while (!int.TryParse(Console.ReadLine(), out n))
{
    Console.WriteLine("Podaj prawidłową liczbę.");
}

Nie dyskutujcie mi w komentarzach na temat wątku, bo naskarżę do @madmike i już nic nie będzie takie jak przedtem.

0

Od razu mi przeskakuje do "x" i nie mogę podawać odpowiednich wartości przy stopniach wielomianu...

 
static void Main(string[] args)
        {
            Start:
            int n;     
            int iloscElementow;    


            Console.WriteLine("Podaj stopień wielomioanu: ");
            
            while (!int.TryParse(Console.ReadLine(), out n))
            {
                Console.WriteLine("Podaj prawidłową liczbę.");
                Console.WriteLine();
                goto Start;
            }
   
            if (n > 10)  
            {
                Console.WriteLine("Zbyt duża wartość wielomianu (1-10)");
                Console.WriteLine();
                goto Start;
            }

            if (n == 0)  
            {
                Console.WriteLine("Wartość wielomiany nie może być 0 ");
                Console.WriteLine();
                goto Start;
            }


            iloscElementow = n + 1;  // Powiększenie tablicy stopnia wielomianu + 1

            double[] a = new double[iloscElementow];

            Console.WriteLine("Podaj wartosc a: ");

            
            for (int i = 0; i > iloscElementow; i++)
            {
                Console.WriteLine("a [" + i + "] = ");
                a[i] = Convert.ToInt32(Console.ReadLine());
            }

            double x;

            Console.WriteLine("Podaj x:");
            x = Convert.ToDouble(Console.ReadLine());
0

Przeskakuje, bo masz błąd w linijce
for (int i = 0; i > iloscElementow; i++)
powinno byc i < iloscElementow

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