2013-07-24 3 views
1

가 여기에 Int32.TryParse 경우 조건 사용하여 코드의 내 작품이다. (콘솔 응용 프로그램)Int.tryparse가 If 조건에서 올바르게 작동하지 않습니다 - 어떤 설명입니까?

Console.WriteLine("Enter the no of the person(value for n)"); 
string number = Console.ReadLine();    
Console.WriteLine("Enter the no of the bulb whose state you want to check(value for x)"); 
string bulbNumber = Console.ReadLine();   
if ((Int32.TryParse(number, out n)) || (Int32.TryParse(bulbNumber, out x))) 
{ 
} 

우리는 간략한에서 N의 값을 선택하면, 그것은 제대로 값을 입력 한 캡쳐,하지만 당신은을 선택하면 x 값, 놀랍게도 0입니다 !!! - 이것을 극복 할 수있는 방법이 있습니까? 이 변칙의 원인이 무엇인지 궁금합니다.

+0

은 당신의 문제를 해결하기 위해 if 문 밖에서 분석보십시오. – Oscar

+0

당신은'||'Or 조건을 가지고 있습니다. 숫자가 파싱되면 그것은 사실이 될 것이고 if 본문에 들어갈 것입니다. 대신에'&&'를 사용하십시오 –

+0

|| 조건의 첫 번째 부분이 true로 평가되면 명령문의 두 번째 부분에 도달하지 않으므로 x가 0으로 유지됩니다. – Ric

답변

2

물론 x 값은 0입니다. n으로 구문 분석 한 후에는 사용자의 조건에 이미 "참"이 있으므로 두 번째 tryparse가 실행되지 않습니다. 당신이 모두 구문 분석 사용를 사용하며 조건 있는지 확인하려는 경우 :

if ((Int32.TryParse(number, out n)) && (Int32.TryParse(bulbNumber, out x))) 
+0

많은 분들께 감사드립니다. – Kruizer

+0

@KuruvillaPhilip, 문제가 없습니다. 다른 연산자도 살펴볼 것입니다. 진행하면서 매우 유용하게 사용됩니다. :). 내 대답에 제공된 링크를 사용하여 필요한 것을 찾을 수 있습니다. –

5

당신은 & &보다는 ||를 사용한다 "||" 하나가 사실이라면 어떤 것이고 두 번째는 무시한다는 말입니다. & &을 모두 사용해야합니다.

if ((Int32.TryParse(number, out n)) && (Int32.TryParse(bulbNumber, out x))) 
{ 
     //Go crazy 
} 

원래 코드는이 할 것이라는 점을 의미 :

먼저 tryparse을 || 두 번째 tryparse

첫 번째 완료> straight into if 문에서 두 번째 예외는 무시됩니다.

& &의 경우 이어야하며이 참이어야합니다.

이에 대한 자세한 내용은 당신은 조건문의 차이의 예를 볼 수 MSDN을 사용할 수 있습니다

&& operator

|| operator