2013-03-02 67 views
3

例如,當我的程序要求輸入一個數字並輸入一個字母時,程序退出。那麼,如何在輸入信件時不做任何事情? 我有「詮釋」或「串」,但不是「雙打」這是真的絆倒了我,我也不太明白怎麼連那些固定當我輸入一個字母而不是一個變量時,我遇到了簡單的計算器程序突然中斷的問題

static void Main(string[] args) 
    { 
     Console.WriteLine("type 'Exit' to leave this program."); 
     Console.ReadLine(); 
     Console.Clear(); 
    Valuechoice: Console.WriteLine("Please choose a number."); 
     double value1 = Convert.ToDouble(Console.ReadLine());  
     Console.WriteLine("Please choose a second Number."); 
     double value2 = Convert.ToDouble(Console.ReadLine()); 
     Console.WriteLine("What would you like to do to these numbeers?"); 
     Console.WriteLine("Multiply"); 
     Console.WriteLine("Divide"); 
     Console.WriteLine("Add"); 
     Console.WriteLine("subtract"); 
     string operation = Console.ReadLine(); 
     Console.WriteLine(); 
     Console.Clear(); 
     if (operation == "Multiply") 
     { 
      double total1; 
      total1 = (value1 * value2); 
      Console.WriteLine(total1); 
      Console.ReadLine(); 
      Console.Clear(); 
      goto Valuechoice; 
     } 
     if (operation == "Divide") 
     { 
      double total2; 
      total2 = (value1/value2); 
      Console.WriteLine(total2); 
      Console.ReadLine(); 
      Console.Clear(); 
      goto Valuechoice; 
     } 
     if (operation == "Add") 
     { 
      double total3; 
      total3 = (value1 + value2); 
      Console.WriteLine(total3); 
      Console.ReadLine(); 
      Console.Clear(); 
      goto Valuechoice; 

     } 
     if (operation == "Subtract") 
     { 
      double total4; 
      total4 = (value1 - value2); 
      Console.WriteLine(total4); 
      Console.ReadLine(); 
      Console.Clear(); 
      goto Valuechoice; 

     } 
     if (Console.ReadLine() == "Exit") 
     { 
      Environment.Exit(0); 
     } 
+0

只需讀取用戶輸入的'String'然後確定它是否是試圖將其轉換爲一個'Double' – 2013-03-02 22:38:25

+0

這個問題確實是之前的一封信太局部化了。你最好用更一般的形式來表達你的問題。 – 2013-03-02 22:40:56

+0

您也可以捕獲Convert.ToDouble引發的異常。 – 2013-03-02 22:42:53

回答

4

Convert.ToDouble將拋出FormatException如果看到了這一點輸入不是有效的雙。改爲使用double.TryParse

例如,你可以做這樣的事情不斷地問用戶有效數字:

double value1; 

while(!double.TryParse(Console.ReadLine(), out value1)) 
{ 
    Console.WriteLine("Please choose a valid number"); 
} 

也有真的沒有理由在這裏使用goto。我建議重新構建您的程序來代替使用循環。

+0

感謝它的魅力。你能解釋一下如何使用循環嗎?我只是在學習如何編程。 – TheMightyQuin 2013-03-03 01:31:29

+0

@TheMightyQuin:[MSDN的while循環文檔](http://msdn.microsoft.com/en-us/library/2aeyhxcd(v = vs.71).aspx)非常好 - 基本上它只是重複代碼在塊內,直到括號內的條件爲假。 – 2013-03-03 13:24:32

+0

非常感謝你:) – TheMightyQuin 2013-03-04 16:57:25

1

使用TryParse - 這樣的事情:

double value1; 
while (!double.TryParse(Console.ReadLine(), out value1) { 
    Console.WriteLine("Please enter a valid number"); 
} 
0

您可以將信件不能轉換爲雙,這是一個數字。這就像是說把「e」轉換成小數點34.72。不可能。

嘗試這樣:

bool valid = true; // locally declared variable, this is important! 

string value = Console.ReadLine(); 
valid = validateInput(value); 

if (valid == true) { 
double value1 = Convert.ToDouble(value); 
// Proceed with calculations, etc 
} 

private bool validateInput(string value) { 
bool valid = true; 
foreach (char c in value) 
    { 
     if (char.IsLetter(c)) 
      valid = false; 
     Console.WriteLine("Input is invalid!"); 
    } 
return valid; 
} 
相關問題