2015-09-07 55 views
2

我需要拒絕在我的控制檯應用程序中寫入字符串的能力,此時,當輸入文本而不是數字時,控制檯崩潰。拒絕字符串變量中的字符串

我沿着這一權利的行現在的東西

class Program 
{ 
    static void Main(string[] args) 
    { 
     string[] names = new string[2]; 
     string age; 
     bool agetest = false; 

     Console.WriteLine("Hello, I am the NameBot2000, What is your first name?"); 
     names[0] = Console.ReadLine(); 
     Console.WriteLine("Well done. What is your surname?"); 
     names[1] = Console.ReadLine(); 
     Console.WriteLine("What year were you born in?"); 
     age = Console.ReadLine(); 

     int.Parse(age); 

     if (Enumerable.Range(0,2015).Contains(age)); 




     int year = 0; 


     string wow = ""; 

     if (Enumerable.Range(0,31).Contains(year)) 
      wow = "young"; 

     else if (Enumerable.Range(31,51).Contains(year)) 
      wow = "old"; 

     else if (Enumerable.Range(51,500).Contains(year)) 
      wow = "ancient"; 

     Console.WriteLine("Well done. You said your name was {0} {1}, and you are {2} years old!", names[0], names[1], year); 
     Console.WriteLine("You are so {0}!", wow); 
     Console.ReadLine(); 


    } 
} 

我試圖納入一個布爾值,但我不能確定如何比較變量來檢查它是哪一種格式。

謝謝堆提前!

+2

http://www.dotnetperls.com/int-parse – Deftwun

+2

有一個*很多*與此代碼的問題,因此很難準確地確定你問哪一個。你能否把這個縮小到一個小片段來展示你確切的問題? – Blorgbeard

+0

'int.Parse(age);'不會做任何事情。將結果保存在'int'中。 'int iage = int.Parse(age);' –

回答

0

使用嘗試捕捉

string age = console.readline(); 
bool validage = false; 
While(!validage) 
{ 
    try 
    { 
     int myage = int.parse(age); 
     validage = true; 
    } 
    catch 
    { 
     console.write("Please Enter an Integer value for age:"); 
     age = console.readline(); 
    } 
} 
+3

更好地使用tryparse來爲您處理錯誤處理。 – Steve

+0

是的,可以工作,但是我想能夠通知用戶並提示輸入新的信息,tryparse也可以工作,如果你只是想拋出一個錯誤,繼續前進。 – Nikerym

+0

你可以從tryparse中檢查一個虛假的回報,然後用它做一些事情,比如Ben的回答。 – Steve

5

相反的Parse,使用TryParse

int age = 0; 
if (Int32.TryParse(Console.Readline, out age) 
    // Correct format. 
else 
    // error! 

什麼TryParse()會做,就是把用戶輸入,嘗試解析它爲int,如果成功,將輸出一個int(和bool = true),否則它會輸出一個bool = false

0

您可以檢查ConsoleKeyInfo以確保用戶只能輸入年齡的數字。

Console.WriteLine("Enter Age : "); 
ConsoleKeyInfo key; 
string ageStr = ""; 
do 
{ 
    key = Console.ReadKey(true); 
    if (key.Key != ConsoleKey.Backspace && key.Key != ConsoleKey.Enter) 
    { 
     if (char.IsNumber(key.KeyChar))//Check if it is a number 
     { 
      ageStr += key.KeyChar; 
      Console.Write(key.KeyChar); 
     } 
    } 
    else 
    { 
     if (key.Key == ConsoleKey.Backspace && ageStr.Length > 0) 
     { 
      ageStr = ageStr.Substring(0, (ageStr.Length - 1)); 
      Console.Write("\b \b"); 
     } 
    } 
} 
while (key.Key != ConsoleKey.Enter); 

Console.WriteLine("Age is {0}", ageStr);