2017-02-21 5 views
-4
 int VillainId = -1; 
     Console.Write("Enter VillainId: "); 
     while (!int.TryParse(Console.ReadLine(), out VillainId)) 
     { 
      Console.WriteLine("You need to enter a valid Villain Id!"); 
      Console.Write("Enter VillainId: "); 
     } 

while(**this code here**){//rest of the code} 내부의 코드가 어떻게 작동하는지 알려줄 수 있습니까? 그것이 성공적으로 숫자를 파싱 할 때까지 그것이 {} 내부에 있었는지는 알았지 만 조건과 루핑에서 이해합니다. 어떻게 작동합니까?while 식 내에서 코드 실행

+1

Int.TryParse는 Console.ReadLine()에서 가져 오는 문자열을 성공적으로 파싱하면 true를 반환합니다. 앞의'! '는 bool을 뒤집어 쓰는 것을 의미하므로'while'은 괄호 안에있는 코드를 실행하고'int.TryParse'가 false를 반환하면'while'이 다시 실행됩니다 - 또 다시 반복 될 때까지 'int.TryParse'는 참을 반환합니다. –

+1

그래서 내가 잘못 이해한다면 {}에서 작업을 수행 한 다음 다시 검사하면 전체 try.parse가 다시 실행되고 성공하면 int를 반환하고 true를 반환한다는 것을 의미합니까? –

+1

맞습니다. 다시 한번 새로 입력 할 때마다 Console.ReadLine()을 호출하고, 그 값을 구문 분석하려고 시도하는 int.TryParse()에 전달합니다. 성공적이며 루프에서 빠져 나옵니다. [do/while 루프] (https://msdn.microsoft.com/en-us/library/370s1zax.aspx?f=255&MSPPError=-2147217396)는 코드를 작성하는 또 다른 방법이며, 주위에 머리. –

답변

3

int.TryParse true를 반환 성공적이 Console.ReadLine()에서 점점 문자열을 구문 분석합니다. 앞에있는 !int.TryParse에 의해 반환 된 부울 값을 반대로 바꾸는 것을 의미하므로 while은 괄호에있는 코드를 실행하고 int.TryParse이 false를 반환하면 false는 true으로 반전되고 while은 다시 실행됩니다. int.TryParse이 true를 반환 할 때까지 "while execution"은 괄호 안의 코드가 먼저 실행되고 그 결과가 true이면 while의 본문도 실행된다는 것을 의미합니다.

동일한 코드를 작성하는 다른 방법은 다음과 같습니다. 조금 작아도 쉽게 따라갈 수 있습니다.

int VillainId = -1; 
bool parseOK = false; 
do 
{ 
    Console.Write("Enter VillainId: "); 

    parseOK = int.TryParse(Console.ReadLine(), out VillainId); 

    if (!parseOK) 
    { 
     Console.WriteLine("You need to enter a valid Villain Id!"); 
    } 
} while (! parseOK); 
2

int.TryParse() 반환 true을 변환이 성공하고 ! (logical negation operator) 자신의 오른쪽에 boolean 값을 반전하는 경우 (!truefalse 같음).

while의 조건마다 루프 평가되기 때문에, 모든 잘못된 입력 while()의 블록 코드가 실행된다.

흐름은 기본적으로 다음과 같습니다

Console.Write("Enter VillainId: "); 
// asks to user input 

while (!int.TryParse(Console.ReadLine(), out VillainId)) 
// while the conversion is not successfull 
{ 
    Console.WriteLine("You need to enter a valid Villain Id!"); 
    Console.Write("Enter VillainId: "); 
    // asks for user to input valid data 
} 
+0

저는 while 루프가 try.parse를 조건을 확인할 때마다 실행한다는 것을 이해합니다. –

+0

@StoyanGrigorov 코드를 실행하고 직접 찾으십시오. – Servy

+0

에드 플 런켓 (Ed Plunkett)의 의견을 읽은 후에 나는 그것이 어떻게 명확하게 작용하는지 이해합니다. 입력 주셔서 감사합니다 : –