2012-02-13 2 views
3

코딩에 익숙하지 않아서 C#을 사용하여 루프 비즈니스를 수행하고 있습니다. 오랜 시간을 망친 후에 나는 마침내 성명서를 반복하도록 만들었지 만, 이제는 어떤 성명이 먼저 만들어 졌는지를 반복합니다. 예를 들어, 숫자 6을 생성하고 7을 추측하면 "너무 높음"이라고 표시되지만, 너무 낮거나 6보다 작 으면 다시 추측 할 때 "너무 높음"이라고 표시됩니다. . "C# Do 루프 루핑 문제가 발생했습니다.

감사

static void Main(string[] args) 
    { 
     Random r = new Random(); 

     int intRandomNum; 

     // ask the random num gen for num between 1 and 12 
     intRandomNum = r.Next(10) + 1; 

     //ask user for their first guess 
     Console.WriteLine("I'm going to generate a random number, can you guess what it is? " + intRandomNum); 

     int intUserNum = int.Parse(Console.ReadLine()); 

     do 
     { 

      if (intUserNum == intRandomNum) 
      { 
       Console.WriteLine("You got it! Great job!"); 
      } 

      if (intUserNum < intRandomNum) 
      { 
       Console.WriteLine("Too low! Try Again."); 
       Console.ReadLine(); 
      } 
      if (intUserNum > intRandomNum) 
      { 
       Console.WriteLine("Too high! Try again."); 
       Console.ReadLine(); 
      } 

     } while (intUserNum != intRandomNum); 

     Console.ReadKey(); 
    } 
} 

}

덕분에 도움을 모두! 알 겠어! 마침내!

+0

리드가 정답을 가지고 있지만 보조 노트로, 당신은 아마 중 하나를 이동해야합니다을 루프에서 빠져 나오고 (올바른 때와 링크를 쳤을 때). 동일한 수표를 두 번 내지 못하게됩니다. 그냥 기본 최적화 –

답변

5

루프 내부에 구문 분석을 넣어야 intUserNum을 다시 계산할 수 있습니다.

int intUserNum = int.Parse(Console.ReadLine()); 

    do 
    { 

     if (intUserNum == intRandomNum) 
     { 
      Console.WriteLine("You got it! Great job!"); 
     } 

     if (intUserNum < intRandomNum) 
     { 
      Console.WriteLine("Too low! Try Again."); 
      intUserNum = int.Parse(Console.ReadLine()); 
     } 
     if (intUserNum > intRandomNum) 
     { 
      Console.WriteLine("Too high! Try again."); 
      intUserNum = int.Parse(Console.ReadLine()); 
     } 

    } while (intUserNum != intRandomNum); 

코드는 작성된대로 사용자로부터 새 줄을 읽지 만 절대 숫자로 바꾸지 않으므로 변수가 변경되지 않습니다. 이로 인해 첫 번째 잘못된 추측이 영원히 사용됩니다.

int.Parse 대신 int.TryParse을 사용하는 것이 좋습니다. 이 정수가 아닌 사용자 유형 뭔가 ...

+0

감사! 그랬어! – user1207424

1

루프 내부 읽는 입력을 이동하는 경우가 처리 할 수 ​​있습니다 :입니다

int intUserNum; 

    do 
    { 
     intUserNum = int.Parse(Console.ReadLine()); 
     if (intUserNum == intRandomNum) 
     { 
      Console.WriteLine("You got it! Great job!"); 
     } 

     if (intUserNum < intRandomNum) 
     { 
      Console.WriteLine("Too low! Try Again."); 
     } 
     if (intUserNum > intRandomNum) 
     { 
      Console.WriteLine("Too high! Try again."); 
     } 

    } while (intUserNum != intRandomNum); 
+1

추가 Console.ReadLine 호출을 제거해야합니다.이 경우 ... –

+0

if 문 안에서'Console.ReadLine();'호출을 제거해야합니다. –

+0

네, 저의 실수입니다. 결정된. – Oleksi

1

때문에 실제로 숫자를 가져 오는 코드 intUserNum에 사용자, 즉

int intUserNum = int.Parse(Console.ReadLine()); 

외부 루프, 그래서 한 번만 실행 얻을 것이다. 루프가 반복 될 때마다 동일한 이전 번호를 확인합니다.

코딩 팁 : 컴퓨터에는 의도가 개가 될 것을 모르는 것을 기억하십시오. 귀하의 의도는 아마도 올바른 것으로, 즉 intUserNum에는 항상 사용자가 추측하는 다음 번호가 포함되어야합니다. 그러나 컴퓨터는 사용자가 말한 대로만 수행하고 사용자는 한 번만 번호를 입력해야한다고 말하면 - intUserNum이 이전 값을 유지해야한다고 결코 말하지 않습니다 영원히.

0
int intUserNum = int.Parse(Console.ReadLine()); 

루프 맨 위에 위치해야합니다.

C#을 모르지만 그렇게해야합니다.

0

입력 을 루프 내에서 안에 가져와 구문 분석해야합니다. 그렇지 않으면 값이 같은 모든 시간 유지 : "당신이 바로 그것을 가지고"

// ... 

do 
{ 
    int intUserNum = int.Parse(Console.ReadLine()); 

    if (intUserNum == intRandomNum) 
     Console.WriteLine("You got it! Great job!"); 

    if (intUserNum < intRandomNum) 
    { 
     Console.WriteLine("Too low! Try Again."); 
     Console.ReadLine(); 
    } 
    if (intUserNum > intRandomNum) 
    { 
     Console.WriteLine("Too high! Try again."); 
     Console.ReadLine(); 
    } 

} while (intUserNum != intRandomNum); 
0
static void Main(string[] args) 
{ 
    var rnd = new Random(); 
    var n = rnd.Next(13); 

    while (!Guess(n)) ; 

    Console.ReadKey(); 
} 

static bool Guess(int n) 
{ 
    int input; 

    if (!int.TryParse(Console.ReadLine(), out input)) 
     return false; 

    var msg = input == n ? "Win" : input < n ? "Low" : "High"; 
    Console.WriteLine(msg); 

    return input == n; 
}