2013-09-27 42 views
0

不作业。因此,我有一个简单的控制台程序来读取考试分数,并打印出平均分和分数。到目前为止,它是以下内容:哨兵控制while循环C#

public static void Main() 
    { 
     int sum = 0; 
     int count = 0; 
     double average = 0; 

     Console.WriteLine ("Enter all your exam scores one by one. When finished, enter -99"); 

     string scores = Console.ReadLine(); 

     while (scores != "-99") { 
      sum += int.Parse (scores); 
      count++; 
      scores = Console.ReadLine(); 

     } 
     if (scores == "-99") { 
      average = sum/count; 
      if (average >= 90) 
       Console.WriteLine ("Your average score is {0}. This is good for a letter grade of A", average); 
       Console.WriteLine(....more scores etc...); 

现在我想检查与TryParse无效的条目。我想我会在另一个while循环盘之前,其他并改变原来的一个是这样的:

Console.WriteLine ("Enter all your exam scores one by one. When finished, enter -99"); 

     string scores = Console.ReadLine(); 

      while (int.TryParse(scores, out numbers) == false){ 
       Console.WriteLine("Please enter a valid integer") 
       scores = Console.ReadLine(); 
       sum += int.Parse(scores); 
       count++; 

     } 
      while (scores != "-99" && int.TryParse(scores, out numbers) == true) { 
      sum += int.Parse (scores); 
      count++; 
      scores = Console.ReadLine(); 

     } 
      if (scores == "-99") { 
      average = sum/count; 
      if (average >= 90) 
       Console.WriteLine ("Your average score is {0}. This is good for a letter grade of A", average); ...etc... 

这里的问题是,如果用户在进入第一个有效的条目,然后进入一个无效时,编译器无法返回到第一个while循环来检查无效条目。所以我试图交换while循环的位置。但是这具有相同的效果;它无法返回到第一个while循环以在输入无效的条目后检查有效条目。答案很可能很简单,但我被卡住了。

回答

2

您遇到的问题是,你从第一回路断线时TryParse回报true,但没有求助于重新进入循环。相反,你应该嵌套你的循环。带有标识的循环应该是外部循环,并且验证并重新提示用户的循环应该是内部循环。这里是一个例子:

while(scores != "-99") 
{ 
    scores = Console.ReadLine(); 

    while((int.TryParse(scores, out numbers) == false) 
    { 
     //validation failed, re-prompt user for better number 
     Console.WriteLine("Bad value, try again") 
     scores = Console.ReadLine() 
    } 

    //do stuff here with the valid score value 
    } 
+0

只需要小心,如果用户在第二次尝试时输入-99,因为您需要跳出两个循环。我没有在上面的例子中包括如何做到这一点。 – JNYRanger