2017-08-15 39 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

谢谢你肯!改变它浮动,它的工作原理! – sandracodes

回答

0

如果你希望用户能够用小数点输入数字,那么你需要使用支持小数点类型,像decimal(像你已经做了gradeTotal) 。要做到这一点,你需要改变你如何解析和存储用户的输入,通过改变intdecimal在几个地方:

decimal[] score = new decimal[100]; 

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

但也有你需要以及一些其他的变化。当我们说gradeTotal += decimal.Parse(inValue);时,如果用户输入一个非数字字符串,我们会得到一个异常。我们希望避免例外情况,因此我们应该使用TryParse来代替,因为我们已经在我们的if条件中执行了此操作。

事实上,我们可以重新使用一些我们已有的代码,通过先输入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();