2011-04-21 3 views
0
Imports System 

Public Class Test 
    Public Shared Sub Main() 
     Dim n As Integer 
     n = Console.ReadLine 
     Do While n <> 42 
      System.Console.WriteLine(n) 
      n = Console.ReadLine 
     Loop 
    End Sub 
End Class 

이 코드는 런타임 오류가 발생합니다. 어떻게 변경할 수 있습니까? 리스트에서 1에서 42까지 그리고 5가 아닌 수를 인쇄하는 루프를 제한하는 방법은 무엇입니까?vb.net에서 런타임 오류가 발생했습니다. 목록의 번호를 사용하지 않으려합니다.

+0

오류를 제공 할 수 있습니까? –

+0

'n = Console.ReadLine'에서'ReadLine'이'string'을 반환하기 때문에 컴파일 오류가 발생합니다. – Andrey

+0

'n = CInt (Console.ReadLine) '시도 –

답변

0

런타임 크래시에 대한 가장 쉬운 해결책은 'n'을 String이 아닌 정수로 처리하는 것입니다. inputed 값이 원래의 코드를 정수로 변환 할 수없는 경우

Dim s As String 
    s = Console.ReadLine 
    Do While s <> "42" 
     System.Console.WriteLine(s) 
     s = Console.ReadLine 
    Loop 

런타임 오류가 발생합니다. 반대로 TryParse()와 같은 다른 메서드를 사용하여 변환이 실패한 경우를 처리 할 수 ​​있습니다.

Dim n As Integer 
    Integer.TryParse(Console.ReadLine, n) 
    Do While n <> 42 
     System.Console.WriteLine(n) 
     Integer.TryParse(Console.ReadLine, n) 
    Loop 

위의 코드는 작동하지만 정수로 변환하는 데 실패 모든 입력 값은 여전히 ​​콘솔에 기록됩니다. IE는 'A'를 입력하면 '0'을 출력합니다. 숫자이거나 42가 아닌 입력 된 숫자 만 인쇄하려면 위의 내용을 변경해야합니다. TryParse()는 구문 분석에 성공했는지 여부를 나타내는 부울 값을 반환합니다.

도움이 되었기를 바랍니다. 귀하의 질문에서 '5'로 무엇을 의미하는지 완전히 이해하지 못했습니다. 당신은 명확히 할 수 있습니까?

+0

TryParse는 부울을 반환합니다. –

+0

@Bala R - 당신은 100 % 정확합니다. 제 실수를 시정 해 주셔서 감사합니다. –

0

콘솔에 입력하고 다른 입력을 거부하기 전에 입력이 정수인지 확인할 수 있습니다.

Dim n As Integer 
    Dim input As String 
    Do While n <> 42 
    input = Console.ReadLine 
    If Not String.IsNullOrEmpty(input) AndAlso IsNumeric(input) Then 
     n = CInt(input) 
     System.Console.WriteLine(n) 
    Else 
     System.Console.WriteLine("Invalid input.") 
    End If 
    Loop 
관련 문제