2013-08-05 3 views
0

У меня есть кодРазрешить '.' (Точка) только ввод номера в консоли

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"); 
     } 
    } 
} 
while (key.Key != ConsoleKey.Enter); 

Console.WriteLine(); 
Console.WriteLine("The Value You entered is : " + _val); 

, что позволяет только ввод номера. Но как я могу разрешить символ «.» (Точка), потому что я хочу работать с номерами с плавающей запятой?

+2

В общем вы делаете такого рода странно. Вы получаете фактический ключ, который был нажат, но вместо этого вы можете просто использовать 'Console.ReadLine()' для чтения всех входных данных. Тогда у вас не будет проблем с чтением значений, например, 1049.4839 – evanmcdonnal

+0

Но как я могу запретить письма в этом случае? –

+0

@evanmcdonnal Похоже, он пытается отфильтровать вход пользователя. Подобно тому, как нельзя вводить буквы. – Steve

ответ

-1
if ((key.KeyChar >= 48 && key.KeyChar <= 57) || key.KeyChar == 46) 
    { 
     _val += key.KeyChar; 
     Console.Write(key.KeyChar); 
    } 
+1

Вы не должны использовать магические числа, подобные этому. Для читателя совершенно непонятно, что означают эти цифры. Вместо этого вы можете просто использовать такие методы, как 'char.IsDigit', или в случае десятичного сравнения char с фактическим символьным литералом, а не с числовым представлением. – Servy

+0

@Servy Я согласен с вашими комментариями по поводу нечеткого кода. Но я думаю, вы пишете ответ на вопрос. Это помогает нам больше. Благодарю. – cutefather

+0

@cutefather: Если вы собираетесь сделать это, то, по крайней мере, «0», «9» и «.». – Guvante

0
string _val = ""; 
Console.Write("Enter your value: "); 
ConsoleKeyInfo key; 
do 
{ 
    key = Console.ReadKey(true); 

    if (char.IsNumber(key.KeyChar) || key.KeyChar == '.') 
    { 
     _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"); 
     } 
    } 
} 
+0

это должно решить вашу проблему bro – nordx

Смежные вопросы