2013-08-05 23 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

這應該解決你的問題兄弟 – nordx