Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > C#: перехват ввода с консоли


Автор: AtaL 24.10.2006, 19:51
С С#, равно как и с любым C, практически не знакома. Сейчас приходится изучать с нуля.

Стоит следующая задача: 

Есть консольное приложение, где пользователем осуществляется ввод некоей строки, после чего эта строка определенным образом обрабатывается.
Можно ли контролировать данные на этапе ввода - то есть отображаться на экране после нажатия клавиши должны, допустим, только цифры.

Если можно, то как?
Если можно, то с примером кода. smile  smile 

Автор: Void 24.10.2006, 20:24
Код
using System;
using System.Text;

class Program
{
    static void Main()
    {
        // буфер, куда будет записываться введённая строка
        StringBuilder sb = new StringBuilder();
        ConsoleKeyInfo key;
        // Console.ReadKey(true) клавишу считывает, но не отображает
        while ((key = Console.ReadKey(true)).Key != ConsoleKey.Enter) // пока не нажали Enter
        {
            char c = key.KeyChar; // нажатая клавиша
            if (Char.IsDigit(c)) // только цифры
            {
                Console.Write(c); // выводим на консоль
                sb.Append(c); // добавляем к буферу
            }
        }
        Console.WriteLine(); // перевод строки
        Console.WriteLine(sb.ToString()); // выводим на экран
    }
}

Автор: AtaL 25.10.2006, 10:14
Спасибо!

Автор: ivanoid 3.9.2010, 11:42
Подскажите как таким же образом вводить числа с типа double...

Автор: CYBERDREAM 3.9.2010, 12:00
Код

       Char sep = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0];//разделитель целой и дес....
        Boolean addedOnce=false;
        while ((key = Console.ReadKey(true)).Key != ConsoleKey.Enter) // пока не нажали Enter
        {
            char c = key.KeyChar; // нажатая клавиша
            if (Char.IsDigit(c)) // только цифры
            {
                Console.Write(c); // выводим на консоль
                sb.Append(c); // добавляем к буферу
            }
            else if (!addedOnce && c==sep) // разделитель
            {
                addedOnce = true;
                Console.Write(c); // выводим на консоль
                sb.Append(c); // добавляем к буферу
            }
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)