Console.WriteLine("Enter the cost of the item");
string input = Console.ReadLine();
double price = Convert.ToDouble(input);
您好,我希望禁用键盘按钮、AZ、括号、问号等。我想要它,所以如果你输入它,它不会出现在控制台中。我只希望数字 1-9 出现。这是在 C# 控制台应用程序中。谢谢您的帮助!
Console.WriteLine("Enter the cost of the item");
string input = Console.ReadLine();
double price = Convert.ToDouble(input);
您好,我希望禁用键盘按钮、AZ、括号、问号等。我想要它,所以如果你输入它,它不会出现在控制台中。我只希望数字 1-9 出现。这是在 C# 控制台应用程序中。谢谢您的帮助!
试试这个代码片段
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”。
但是,与 John Woo 的答案不同,它不处理退格键。
这是代码:
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<string> 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<string>
参数:一个是确定子字符串是否代表有效条目的开始,另一个是判断它是否完整。这样,我们可以允许按键做出贡献,但在Enter输入完成之前不允许按键。这对于您想要确保一定强度的密码输入或“是”/“否”输入等事情很有用。
过了一会儿,我得到了一个非常简短的解决方案:
double number;
Console.Write("Enter the cost of the item: ");
while (!double.TryParse(Console.ReadLine(), out number))
{
Console.Write("This is not valid input. Please enter an integer value: ");
}
Console.Write("The item cost is: {0}", number);
再见!
此代码将允许您:
这意味着你不能写出类似的东西:“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;
}
}