2016-10-09 7 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(); 

の文化の中には、10進数またはグループ区切りとしてスペース(' ')をデフォルトと'.'または','は無効な入力として解釈されます。

次の2つのプロパティを持つデフォルトで使用されるあなたのセパレータ調べることができます:あなたのこの行で

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

​​
+0

これは機能しました。どうもありがとう。 – ognyan

+0

@ognyan検索開始の詳細設定>詳細設定...あなたのデフォルトカルチャに使用するセパレータを選択できます。答えに記載されているプロパティを使用して、現在のスレッドカルチャ設定を上書きすることもできます。例: 'Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator ="、 ";' – Karolis

0

はこれを置き換える

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

をそれが動作していますか?お知らせ下さい。 :)

+0

これは本当に間違っています:-)分割は、単一の値を分割するためではなく複数の値を入力させることを意味します。 – CodeNotFound

+0

@CodeNotFound okey sir。それから私は彼の質問を誤解した。私の謝罪 –

関連する問題