Используя только литерный ввод, ввести непустую последовательность цифр - 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();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы