2015-01-04 3 views
0
class Program 
{ 
    static void Main(string[] args) 
    { 
     string choice = string.Empty; 
     do 
     { 
     start: 
      int output = 0; 
      int number = 0; 
      Console.WriteLine("Please input a number for it to be counted!"); 
      bool conversion = int.TryParse(Console.ReadLine(), out output); 

      if (number < 1000) 
      { 
       switch (conversion) 
       { 
        case true: 
         while (number <= output) 
         { 
          Console.Write(number + " "); 
          number += 2; 
         } 
         break; 
        case false: 
         Console.WriteLine("ERROR: INVALID INPUT!"); 
         goto start; 
       } 
      } 
      else 
      { 
       Console.WriteLine("APPLICATION ERROR: NUMBER MUST BE BELOW OR AT 1000 TO PREVENT OVERFLOW!"); 
       return; 
      } 

      do // Here is the beginning of the do code 
      { 
       Console.WriteLine("\n Do you want to continue - Yes or No"); 
       choice = Console.ReadLine(); 
       if (choice.ToUpper() != "YES" && choice.ToUpper() != "NO") 
       { 
        Console.WriteLine("ERROR INVALID INPUT: Only input Yes or No!"); 
       } 

      } while (choice.ToUpper() != "YES" && choice.ToUpper() != "NO"); 
     } while (choice.ToUpper() == "YES"); 
    } 
} 

나는이 문에서 do while 루프를 몇 개 사용하고 있지만 사용자가 할당 된 정수 이외의 값을 넣을 때 "ERROR INVALID INPUT :"결과를 루프에 넣는 방법이 트롭다. (즉, 십진수 또는 분수를 넣는 것) 또는 문자열을 넣는 경우. 나는 do while 문을 어디에 두어야 하는지를 알아 내는데 어려움을 겪고 있기 때문에 단순히 goto를 사용했다. 만약 누군가가 어떻게 그 하나의 고토를 do while 루프로 대체 할 수 있었는지 나에게 보여줄 수 있다면, 나는 매우 위대 할 것이다. (당신은 나에게 내가 아직도 내가 아마 이해하지 못할 새로 온 사람 때문에 내 코드를 더 최적화 할 수있는 방법을 보여 주면 참고하지만, 환영은 당신의 최고의 기회를 제공하기 위해!)어떻게이 goto를 do while 루프로 변환 할 수 있습니까?

+2

마찬가지로 '계속; – SimpleVar

답변

1

짧은 답변 :

을 키워드 continue은 루프의 처음으로 돌아가는 것을 의미합니다. 루프 상태를 다시 확인하고 false이면 중단됩니다. 또한 대부분의 사람들은 do-while 루프가 덜 읽기 쉽고 (실제로는 거의 필요하지 않음) 찾기 때문에 대신 while 루프를 사용해보십시오.

단순히 루프를 종료하는 키워드 break도 있습니다. (! 그냥 스위치 케이스)

더 읽을 수있는 버전은 다음과 같이 보일 것입니다 :

string userAnswer = "yes"; 

// while is usually more readable than do-while 
while (userAnswer == "yes") 
{ 
    Console.WriteLine("Please input a number for it to be counted!"); 
    int number; 

    // Ask for new input until the user inputs a valid number 
    while (!int.TryParse(Console.ReadLine(), out number)) 
    { 
     Console.WriteLine("Invalid number, try again"); 
    } 

    if (number < 1000) 
    { 
     // Print from 0 to number, jumping in 2's 
     for (int i = 0; i <= number; i += 2) 
      Console.WriteLine(i + " "); 
    } 
    else 
    { 
     Console.WriteLine("APPLICATION ERROR: NUMBER MUST BE BELOW OR AT 1000 TO PREVENT OVERFLOW!"); 
     continue; // Jump back to the start of this loop 
    } 

    Console.WriteLine("Continue? (Yes/No)"); 
    userAnswer = Console.ReadLine().ToLower(); 

    // Ask for new input until the user inputs "Yes" or "No" 
    while (userAnswer != "yes" && userAnswer != "no") 
    { 
     Console.WriteLine("Invalid input. Continue? (Yes/No)"); 
     userAnswer = Console.ReadLine().ToLower(); 
    } 
} 
0

이봐, 난 도움과 조언을 제공 할 수있는 몇 가지 코드를 게시 할 수 있습니다. 기본적으로 'loopCompleted'라는 이름의 bool을 선언하면 true로 설정할 때까지 do while 루프가 계속됩니다. 단점은 return/goto/etc 같은 루프를 즉시 종료하지 않지만 대부분의 경우 문제가되지 않는다는 것입니다.

대신 스위치 (전환)의/다른 사람이 볼 재미의 그것의 종류가 그렇게하지만 상단 :

하면 Int.TryParse() 나던 이미 이상 그 조금을하는 경우에 당신은 사용할 수 있습니다 분수 값에 대해 false를 반환합니다 (예 : [15.08]는 [15]로 [true]를 반환 함). 그런 다음 TryParse를 사용하기 전에 Console.ReadLine()을 저장 한 다음 stringName.Contains()를 사용하여 '.' 기본적으로 변환이 성공하면 소수점이 포함되어 있는지도 확인합니다.

또 다른 방법으로 float.TryParse()를 수행 한 다음 분수 값인지 확인하십시오.

bool fraction = false; 
if(number % 1.0f > 0) 
    fraction == true; 

퍼센트는 나머지 수가있는 경우는 1로 나눈 때 소수 값이어야 A/B 의 나머지를 반환 계수라고한다.

//start: 
    bool loopCompleted = false; 
    do 
    { 
     int output = 0; 
     int number = 0; 
     Console.WriteLine("Please input a number for it to be counted!"); 
     bool conversion = int.TryParse(Console.ReadLine(), out output); 

     if (conversion && number < 1000) 
     { 
      while (number <= output) 
      { 
       Console.Write(number + " "); 
       number += 2; 
      } 
      loopCompleted = true; 
     } 
     else 
     { 
      if(conversion == false) 
      { 
       Console.WriteLine("ERROR: INVALID INPUT!"); 
      } 
      else 
      { 
       Console.WriteLine("APPLICATION ERROR: NUMBER MUST BE BELOW OR AT 1000 TO PREVENT OVERFLOW!"); 
      } 
     } 
    } while(!loopCompleted) 
관련 문제