2012-05-14 44 views
0

我一直在我嘗試爲銷售變量賦值的行上的每個案例中都收到一個FormatException。任何人都知道我在做什麼錯了?我應該讓這個控制檯程序作爲家庭作業來了解循環,但是我發現更多關於其他的東西。它應該根據每次銷售的10%的佣金保留銷售員佣金的運行標籤。不管怎麼說,這裏是代碼:C#中的System.FormatException異常#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace TubSales 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     char initial; 
     const double COMM_INT = 0.10; 
     double sale, aComm = 0, bComm = 0, eComm = 0; 
     Console.Write("Enter 'A' for Andrea, 'B' for Brittany,\n'E' for Eric, or 'Z' to quit >> "); 
     initial = Convert.ToChar(Console.Read()); 
     while (initial != 'z' && initial != 'Z') 
     { 
      switch (initial) 
      { 
       case 'a': 
       case 'A': 
        Console.Write("Enter the sales for Andrea >> "); 
        sale = Convert.ToDouble(Console.ReadLine()); 
        aComm = aComm + COMM_INT * sale; 
        break; 
       case 'b': 
       case 'B': 
        Console.Write("Enter the sales for Brittany >> "); 
        sale = Convert.ToDouble(Console.ReadLine()); 
        bComm = bComm + COMM_INT * sale; 
        break; 
       case 'e': 
       case 'E': 
        Console.Write("Enter the sales for Eric >> "); 
        sale = Convert.ToDouble(Console.ReadLine()); 
        eComm = eComm + COMM_INT * sale; 
        break; 
       default: 
        Console.WriteLine("You did not enter a valid initial"); 
        break; 
      } 
      Console.Write("Enter 'A' for Andrea, 'B' for Brittany, or 'E' for Eric >> "); 
      initial = (char)Console.Read(); 
     } 
     Console.WriteLine("Andrea had {0}, Brittany had {1}, and Eric had {2} in commissions.", aComm.ToString("C"), bComm.ToString("C"), eComm.ToString("C")); 
     Console.Write("Press any key to exit... "); 
     Console.ReadKey(); 
     } 
    } 
} 

回答

1

雖然裏德的答案是偉大的,它在這裏不是問題。

真正發生的是同樣的情況this one

Console.Read只讀的,並返回「」「回車的第二部分」。這就是轉換失敗的原因。

更換

initial = Convert.ToChar(Console.Read()); 

initial = Convert.ToChar(Console.ReadLine()); 
+0

謝謝。現在就像魅力一樣。 – Nyxm

5

我不斷收到在每個上線的情況下,我嘗試分配爲銷售變量的值的出現FormatException。任何人都知道我在做什麼錯了?

Convert.ToDouble方法將引發FormatException如果字符串(從Console.ReadLine()返回)是不是一個有效的數字。

通常情況下,如果要分析用戶的輸入,這是一個好主意,用Double.TryParse代替,因爲這可以讓你確定輸入是否是一個有效的數字沒有捕捉異常。

這通常是這個樣子:

Console.Write("Enter the sales for Andrea >> "); 
while (!double.TryParse(Console.ReadLine(), out sale)) 
{ 
    Console.WriteLine("Value entered was not a valid number."); 
    Console.Write("Enter the sales for Andrea >> "); 
} 
// Once you get here, "sale" will be set appropriately 
0

更換

initial = Convert.ToChar(Console.Read()); 

initial = Convert.ToChar(Console.ReadLine().FirstOrDefault()); 
相關問題