Используя только литерный ввод, ввести непустую последовательность цифр - C# (198452)
Формулировка задачи:
Используя только литерный ввод, ввести непустую последовательность цифр, перед которой может находиться знак «+» или «-» и за которой следует пробел, и получив соответствующее целое число, присвоив его переменной K.
Кто может решите... И ваше что такое литерный ввод???
Решение задачи: «Используя только литерный ввод, ввести непустую последовательность цифр»
textual
Листинг программы
using System;
static class Task
{
// Оботражение состояния
static void Log(string Message, bool IsError = false)
{
// Запоминаем позицию и переходим на строку выше
int cl = Console.CursorLeft;
Console.CursorTop -= 1;
Console.CursorLeft = 0;
Console.ForegroundColor = IsError ? ConsoleColor.Red : ConsoleColor.Green;
Console.Write(Message.PadRight(Console.BufferWidth));
// Переходим обратно
Console.ForegroundColor = ConsoleColor.Gray;
Console.CursorLeft = cl;
}
static int ReadNumber()
{
bool hasInput = false;
long Value = 0, Sign = 1;
Log("Начало ввода");
while (true)
{
// Чтение символа
char c = Console.ReadKey(true).KeyChar;
switch(c)
{
case '\x1b': // Escape
Log("Предварительно завершено");
throw new Exception();
case ' ': // Space
if (!hasInput) Log("Еще ничего не введено", true);
else
{
Log("Введен пробел");
return (int) (Sign * Value);
} break;
case '+':
case '-':
if (hasInput) Log("Знак может стоять только в начале", true);
else
{
Sign = c == '-' ? -1 : 1;
Log("Введен знак");
Console.Write(c);
} break;
default:
if (!Char.IsDigit(c)) Log("Введен нераспознанный символ", true);
else
{
// Введена цифра
Value = Value * 10 + c - '0';
if (Value > Int32.MaxValue)
{
Log("Число не может быть больше " + Int32.MaxValue, true);
throw new Exception();
}
hasInput = true;
Console.Write(c);
Log("Введена цифра");
} break;
}
}
}
static void Main()
{
Console.Write("Ввод целого числа со знаком, " +
"по окончанию ожидается пробел или Escape\n\n");
try
{
int Value = ReadNumber();
Console.Write("\nВведенное число: {0}", Value);
}
catch (Exception) {}
Console.WriteLine();
Console.ReadLine();
}
}