Как мне разрешить ввод номера в мое консольное приложение C #?

Console.WriteLine("Enter the cost of the item"); string input = Console.ReadLine(); double price = Convert.ToDouble(input); 

Привет, я хочу, чтобы кнопки клавиатуры, AZ, скобки, вопросительный знак и т. Д. Были отключены. Я хочу, чтобы это было, если вы введете его, он не появится в консоли. Я только хочу, чтобы цифры 1-9 отображались. Это приложение C # Console. Спасибо за помощь!

попробуйте этот fragment кода

 string _val = ""; Console.Write("Enter your value: "); ConsoleKeyInfo key; do { key = Console.ReadKey(true); if (key.Key != ConsoleKey.Backspace) { double val = 0; bool _x = double.TryParse(key.KeyChar.ToString(), out val); if (_x) { _val += key.KeyChar; Console.Write(key.KeyChar); } } else { if (key.Key == ConsoleKey.Backspace && _val.Length > 0) { _val = _val.Substring(0, (_val.Length - 1)); Console.Write("\b \b"); } } } // Stops Receving Keys Once Enter is Pressed while (key.Key != ConsoleKey.Enter); Console.WriteLine(); Console.WriteLine("The Value You entered is : " + _val); Console.ReadKey(); 

В этой статье MSDN объясняется, как читать символы по одному в окне консоли. Проверяйте каждый символ, когда он вводится с помощью метода Char.IsNumber () , и отклоняйте те символы, которые не прошли тест.

Вот один из подходов. Вероятно, это слишком сложно, если вы только начинаете работать на C #, так как он использует некоторые более продвинутые аспекты языка. В любом случае, надеюсь, вы найдете это интересным.

У этого есть некоторые интересные особенности:

  • Метод ReadKeys принимает произвольную функцию для проверки того, действительна ли строка. Это упрощает повторное использование всякий раз, когда вы хотите отфильтровать ввод с клавиатуры (например, буквы или цифры, но без пунктуации).

  • Он должен обрабатывать все, что вы бросаете на него, что можно интерпретировать как двойное, например «-123.4E77».

Однако, в отличие от ответа Джона Ву, он не справляется с обратными windowsми.

Вот код:

 using System; public static class ConsoleExtensions { public static void Main() { string entry = ConsoleExtensions.ReadKeys( s => { StringToDouble(s) /* might throw */; return true; }); double result = StringToDouble(entry); Console.WriteLine(); Console.WriteLine("Result was {0}", result); } public static double StringToDouble(string s) { try { return double.Parse(s); } catch (FormatException) { // handle trailing E and +/- signs return double.Parse(s + '0'); } // anything else will be thrown as an exception } public static string ReadKeys(Predicate check) { string valid = string.Empty; while (true) { ConsoleKeyInfo key = Console.ReadKey(true); if (key.Key == ConsoleKey.Enter) { return valid; } bool isValid = false; char keyChar = key.KeyChar; string candidate = valid + keyChar; try { isValid = check(candidate); } catch (Exception) { // if this raises any sort of exception then the key wasn't valid // one of the rare cases when catching Exception is reasonable // (since we really don't care what type it was) } if (isValid) { Console.Write(keyChar); valid = candidate; } } } } 

Вы также можете реализовать функцию IsStringOrDouble которая возвращает false вместо исключения исключения, но я оставляю это как упражнение.

Другим способом, который это может быть расширен, было бы для ReadKeys взять два параметра Predicate : один, чтобы определить, представляла ли подстрока начало действительной записи, а вторая – для того, чтобы сказать, была ли она завершена. Таким образом, мы можем позволить нажатиям клавиш внести свой вклад, но запретить клавишу Enter до тех пор, пока запись не будет завершена. Это было бы полезно для таких вещей, как ввод пароля, где вы хотите обеспечить определенную силу, или для записи «да» / «нет».

Этот код позволит вам:

  • Напишите только одну точку (потому что числа могут иметь только один разделитель на десятичную дробь);
  • Один минус в начале;
  • Один ноль в начале.

Это означает, что вы не сможете написать что-то вроде: «00000.5» или «0000 … -5».

 class Program { static string backValue = ""; static double value; static ConsoleKeyInfo inputKey; static void Main(string[] args) { Console.Title = ""; Console.Write("Enter your value: "); do { inputKey = Console.ReadKey(true); if (char.IsDigit(inputKey.KeyChar)) { if (inputKey.KeyChar == '0') { if (!backValue.StartsWith("0") || backValue.Contains('.')) Write(); } else Write(); } if (inputKey.KeyChar == '-' && backValue.Length == 0 || inputKey.KeyChar == '.' && !backValue.Contains(inputKey.KeyChar) && backValue.Length > 0) Write(); if (inputKey.Key == ConsoleKey.Backspace && backValue.Length > 0) { backValue = backValue.Substring(0, backValue.Length - 1); Console.Write("\b \b"); } } while (inputKey.Key != ConsoleKey.Enter); //Loop until Enter key not pressed if (double.TryParse(backValue, out value)) Console.Write("\n{0}^2 = {1}", value, Math.Pow(value, 2)); Console.ReadKey(); } static void Write() { backValue += inputKey.KeyChar; Console.Write(inputKey.KeyChar); } } 
  string input; double price; bool result = false; while ( result == false ) { Console.Write ("\n Enter the cost of the item : "); input = Console.ReadLine (); result = double.TryParse (input, out price); if ( result == false ) { Console.Write ("\n Please Enter Numbers Only."); } else { Console.Write ("\n cost of the item : {0} \n ", price); break; } } 
  • Запустить консольное приложение из другого консольного приложения
  • Как запустить консольное приложение C # с консолью, скрытой
  • Как написать быстрый цветной вывод на консоль?
  • Как распечатать UTF-8 из консольного приложения c ++ в Windows
  • Не удалось загрузить файл или сборку ... Была сделана попытка загрузить программу с неправильным форматом (System.BadImageFormatException)
  • Невозможно указать модификатор «async» в методе «Основной» консольного приложения
  • Как исправить «Нет перегрузки для метода» принимает 0 аргументов »?
  • как запустить winform из консольного приложения?
  • Консольное приложение .NET как служба Windows
  • Слушайте нажатие клавиши в приложении консоли .NET.
  • Давайте будем гением компьютера.