2017-08-15 15 views
-3

私はC#を初めて使っていますので、やさしくしてください!私はセンチネル制御ループを使って簡略化したGPA電卓を書いて​​います。これまでのところ動作しますが、ユーザが小数点(たとえば2.3または3.5)を使用して等級を入力できるようにしたいと思います。小数点なしの数値も入力できます。アドバイスありがとうございます!ありがとう! コード:C#このコードを変更してユーザーが小数点(3.0,2.5など)を入力できるようにするにはどうすればよいですか?

class Program 
{ 
    static void Main(string[] args) 
    { 
     decimal gradeTotal = 0; 
     int[] score = new int[100]; 
     string inValue; 
     int scoreCnt = 0; 
     Console.WriteLine("When entering grades, use a 0-4 scale. Remember; 
     A = 4, B = 3, C = 2, D = 1, F = 0"); 
     Console.WriteLine("Enter grade {0}: ((X to exit)) ", scoreCnt + 1); 
     inValue = Console.ReadLine(); 
     gradeTotal += decimal.Parse(inValue); 

     while (inValue != "X") 
     { 
      if (int.TryParse(inValue, out score[scoreCnt]) == false) 
       Console.WriteLine("Invalid data -" + "0 stored in array"); 
      ++scoreCnt; 
      Console.WriteLine("Enter grade {0}: ((X to exit)) ", scoreCnt + 
      1); 
      inValue = Console.ReadLine(); 
      if (inValue == "X") break; 
      gradeTotal += decimal.Parse(inValue); 
     } 
     Console.WriteLine("The number of scores: " + scoreCnt); 
     Console.WriteLine("Your grade total is: " + gradeTotal); 
     Console.WriteLine("Your GPA is: {0:0.00}", gradeTotal/scoreCnt); 

     Console.ReadLine(); 
    } 
} 
+0

はダブルを使ってみての代わりに、int型 – AGrammerPro

+2

'int型[]スコア=新しいint型[100];'。 'int'配列に浮動小数点値を格納するときに、浮動小数点値(小数点付きの値)を入力する方法をユーザはどのように想定していますか? –

+1

ありがとうKen!それを浮かせるように変更し、それは動作します! – sandracodes

答えて

0

ユーザーが小数点で数字を入力することができるようにしたい場合は(すでにgradeTotalのためにやっているように)、あなたはdecimalのように、小数点をサポートしているタイプを使用する必要があります。これを行うには、あなたは場所のカップルでdecimalintを変更することで、ユーザの入力を解析し、保存する方法を変更する必要があるでしょう:

decimal[] score = new decimal[100]; 

if (decimal.TryParse(inValue, out score[scoreCnt]) == false) 

しかし、あなたが同様に確認する必要があり、いくつかの他の変更があります。 gradeTotal += decimal.Parse(inValue);と言うとき、ユーザーが数字以外の文字列を入力すると例外が発生します。例外を避けたいので、ifの条件で既に行っているので、TryParseを代わりに使用する必要があります。

実際には、以前にwhileループを入力し、すでにあるTryParseを使用することで、既に使用しているコードの一部を再利用できます。

また、入力が無効な場合、配列にデータ(ゼロ)を格納する理由は何ですか?最初に一時変数に格納し、それが有効であれば配列に追加するだけです。また、非数値入力以外の無効なデータがあることを覚えておく必要があります。数字が0と4の間であることを確認するための条件をいくつか追加できます。

他のいくつかのものは、gradeTotalscoreCntの変数です。私たちは配列内のアイテムを合計し、配列内のアイテムの数を使ってスコアをカウントすることで、合計を得ることができます(無効なアイテムを追加しないと仮定します)。

それで、なぜアレイを使うのですか? A List<decimal>はより簡単です。なぜなら、私たちは手前でセットサイズを宣言する必要がないからです。現在の実装では、無効なものを含めて100項目に制限されています。

はここで、これらの変更が組み込まれていくつかのコードです:

var scores = new List<decimal>(); 

Console.WriteLine("When entering grades, use a 0-4 scale. Remember:"); 
Console.WriteLine("A = 4, B = 3, C = 2, D = 1, F = 0\n"); 

Console.Write("Enter grade 1 (or 'X' to exit): "); 
var inValue = Console.ReadLine(); 

while (inValue.ToUpper() != "X") 
{ 
    decimal input; 

    if (!decimal.TryParse(inValue, out input) || input < 0 || input > 4) 
    { 
     Console.WriteLine("Invalid data; enter a number from 0 to 4, or 'X' to exit."); 
    } 
    else 
    { 
     scores.Add(input); 
    } 

    Console.Write("Enter grade {0} (or 'X' to exit): ", scores.Count + 1); 
    inValue = Console.ReadLine(); 
} 

Console.WriteLine("The number of scores: " + scores.Count); 
Console.WriteLine("Your grade total is: " + scores.Sum()); 
Console.WriteLine("Your GPA is: {0:0.00}", scores.Average()); 

Console.ReadLine(); 
関連する問題