2016-10-09 217 views
0

我遇到了我的控制檯輸入問題。 代碼是:C#控制檯輸入

using System; 
using System.Linq; 

class Training 
{ 
    static void Main() 
    { 
     double[] arr = Console.ReadLine().Split(' ').Select(double.Parse).ToArray(); 
     int[] roundedNums = new int[arr.Length]; 
     for (int i = 0; i < arr.Length; i++) 
     { 
      roundedNums[i] = (int)Math.Round(arr[i], MidpointRounding.AwayFromZero); 
     } 
     for (int i = 0; i < roundedNums.Length; i++) 
     { 
      Console.WriteLine("{0} => {1}", arr[i], roundedNums[i]); 
     } 
    } 
} 

當我啓動程序我得到一個異常,如果我使用。而不是,(例如:如果我輸入3.5我得到一個錯誤,但如果我輸入3,5程序工作正常)。 我正在使用Visual Studio Community 2015.

我該如何解決這個問題?

+1

你會得到什麼異常? – meJustAndrew

+2

你的文化不同於英語。一些culutres只'','char作爲小數點分隔符。 – CodeNotFound

回答

1

您可以更改您的代碼以使用特定的文化。例如不變文化,然後將'.'作爲小數點分隔符,將','作爲組分隔符。

你可以申請InvariantCulture這樣:

double[] arr = Console.ReadLine() 
       .Split(' ') 
       .Select(x => double.Parse(x, CultureInfo.InvariantCulture)) 
       .ToArray(); 

一些文化的缺省是空格(' ')爲十進制或組分隔符和'.'','被解釋爲無效的輸入。

你可以看一下默認情況下,使用您的隔板具有兩個屬性:

​​
+0

這工作。非常感謝。 – ognyan

+0

@ognyan在開始搜索中輸入區域>高級設置...,您可以選擇默認文化使用的分隔符。您也可以使用答案中提到的屬性來覆蓋當前的線程文化設置。例如:'Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator =「,」;' – Karolis

0

替換此:

double[] arr = Console.ReadLine().Split('.').Select(double.Parse).ToArray(); 

你這一行:

double[] arr = Console.ReadLine().Split(' ').Select(double.Parse).ToArray(); 

是它的工作?讓我知道。 :)

+0

這真的是錯誤的:-)讓用戶輸入多個值而不是分割單個值的分界。 – CodeNotFound

+0

@CodeNotFound okey先生。然後我誤解了他的問題。我很抱歉 –