2013-09-27 8 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로 잘못된 항목을 확인하고 싶습니다.

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 루프의 위치를 ​​바꾸려고했습니다. 그러나 이것도 같은 효과가 있습니다. 유효하지 않은 항목이 입력 된 후 유효한 항목을 확인하기 위해 첫 번째 while 루프로 돌아갈 수 없습니다. 대답은 간단하지만 대부분 붙어 있습니다.

답변

2

TryParsetrue을 반환하면 첫 번째 루프에서 벗어 났지만 루프를 다시 입력 할 필요가 없습니다. 대신 루프를 중첩시켜야합니다. 센티넬이있는 루프는 외부 루프 여야하며 사용자를 확인하고 다시 프롬프트하는 루프는 내부 ​​루프 여야합니다. 예를 들면 다음과 같습니다.

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