.NET 4.x Консольное приложение. Блокировка клавиш - C#
Формулировка задачи:
Всем привет,сразу к делу:
Сейчас это выглядит так. Хочу спросить,как можно сделать так,чтобы при нажатии сторонних клавиш(кроме Enter и Esc) ничего не срабатывало? Как видно сейчас,стоит обычная метка,но это не гуд и хотелось бы сделать все нормально. Как можно такое реализовать?
using System;
class Program
{
static void Main()
{
Metka:
char answer;
do
{
Console.Clear();
double x, x1, x2;
Console.WriteLine("Введите a");
double a = double.Parse(Console.ReadLine().Trim());
Console.WriteLine("Введите b");
double b = double.Parse(Console.ReadLine().Trim());
Console.WriteLine("Введите c");
double c = double.Parse(Console.ReadLine().Trim());
double d = ((b * b) - (4 * a * c));
Console.WriteLine("Дискриминант = " + d);
if (d < 0)
{
Console.WriteLine("Нет корней");
}
if (d == 0)
{
x = (-b / 2 * a);
Console.WriteLine("1 корень: x = " + Math.Round(x, 2));
}
if (d > 0)
{
double sqrtD = (double)System.Math.Sqrt(d);
x1 = ((-b + sqrtD) / (2 * a));
x2 = ((-b - sqrtD) / (2 * a));
Console.Write("2 корня: x1 = " + Math.Round(x1, 2));
Console.WriteLine(", x2= " + Math.Round(x2, 2));
}
Console.WriteLine("Press Enter to continue\nPress Esc to exit");
answer = Console.ReadKey().KeyChar;
}
while (answer == 13);
if (answer != 27)
{
goto Metka;
}
}
}Решение задачи: «.NET 4.x Консольное приложение. Блокировка клавиш»
textual
Листинг программы
using System;
class Program
{
static void Main()
{
while(true)
{
try //Обычное выполнение программы.
{
Console.Clear();
double x, x1, x2;
Console.WriteLine("Введите a");
double a = double.Parse(Console.ReadLine().Trim()); //Вводим значение a
Console.WriteLine("Введите b");
double b = double.Parse(Console.ReadLine().Trim()); //Вводим значение b
Console.WriteLine("Введите c");
double c = double.Parse(Console.ReadLine().Trim()); //Вводим значение c
double d = ((b * b) - (4 * a * c)); //Находим Дискриминант и выводим его не экран
Console.WriteLine("Дискриминант = " + d);
if (d < 0) //При Дискриминанте меньше нуля выводит "нет корней".
{
Console.WriteLine("Нет корней");
}
if (d == 0) //При Дискриминанте равном нулю,считает единственный корень и выводит его.
{
x = (-b / 2 * a);
Console.WriteLine("1 корень: x = " + Math.Round(x, 2)); //Операция Math.Round округляет значение аргумента с плавающей точкой до определенного кол-ва знаков после точки.
}
if (d > 0) //При Дискриминанте больше нуля,считает и выводит оба корня уравнения.
{
double sqrtD = (double)Math.Sqrt(d); //Вычисляет корень их Дискриминанта
x1 = ((-b + sqrtD) / (2 * a));
x2 = ((-b - sqrtD) / (2 * a));
Console.Write("2 корня: x1 = " + Math.Round(x1, 2));
Console.WriteLine(", x2= " + Math.Round(x2, 2));
}
Console.WriteLine("Для продолжения нажмите Ввод. Для выхода - Esc");
}
catch (Exception ex) //Выполнение программы при введении неверных символов(например,букв). Вывод ошибки и повтор программы сначала.
{
Console.WriteLine("ошибка. " + ex.Message);
}
ConsoleKey k = Console.ReadKey(true).Key; //Присвоение k определенного символьного значения(клавиши).
while (k != ConsoleKey.Escape && k != ConsoleKey.Enter) //тут даже и не знаю,как описать:D
{
k = Console.ReadKey(true).Key;
}
if (k == ConsoleKey.Escape) break;
}
}
}