2014-11-18 1 views
0

다음은 내가 사용하고있는 코드입니다. 나는 프로 시저와 함수로 프로그램을 분리하여 프로그램을 구성하려고합니다. 이 코드는 분할되지 않았을 때 작동했지만, 아래의이 형식을 사용하면 현재 숫자는 0이됩니다. UserInput을 프로 시저 대신 함수로 변경해야합니까? 여러 값을 업데이트하여 주 프로그램에 반환해야하므로 어떻게 함수로 사용할 수 있는지 알지 못했습니다. 사전에 도움을 주셔서 감사 드리며, 제 의견에 사과드립니다. 저는 아직 일반적인 프로그래밍 학습의 초기 단계에 있습니다.프로그램을 절차/기능으로 나누기

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Call ExplanationOfGame() 
    CurrentNumber = RandomNumber() 
    Label2.Text = CurrentNumber 
    While CurrentNumber <> 0 
     Call UserInput(UserNumber, CurrentNumber, Answer) 
     Call ComputerInput(ComputerNumber, CurrentNumber, Answer) 
    End While 
    Call DecideWinner(CurrentNumber, Answer) 
End Sub 

Sub UserInput(ByVal CurrentNumber As Integer, ByVal UserNumber As Integer, ByVal Answer As Integer) 
    Answer = 1 
    Do 
     UserNumber = InputBox("Enter number to minus from the current number (1, 2 or 3). The current number is: " & CurrentNumber) 
    Loop Until (CurrentNumber - UserNumber) >= 0 
    CurrentNumber = CurrentNumber - UserNumber 
    Label2.Text = CurrentNumber 
    MsgBox("You took " & UserNumber & " away from the current number. The new current number is " & CurrentNumber) 
End Sub 
+1

이 ByRef's'에'ByVal's을 변경합니다. – helrich

답변

1

UserInput 함수에서 ByVal 대신 ByRef를 매개 변수로 사용하십시오. ByVal은 변수의 값만 전달하므로 실제 변수를 수정하지는 않습니다.

다른 옵션은 함수로 변경하고 CurrentValue 만 반환하는 것입니다. 전달할 필요가없는 UserNumber와 Answer의 두 매개 변수를 전달하는 것처럼 보입니다. 그런 다음 사용하여 전화

Function UserInput(CurrentNumber As Integer) As Integer 
    ... 
End Function 

:

당신은 그것으로 바꿀 수

CurrentNumber = UserInput(CurrentNumber) 
+0

좋아요, 그렇다면 서브를 함수로 바꿀까요? 이와 비슷한 것일까요? : 'Function UserInput (ByRef CurrentNumber, ByRef UserNumber, ByRef Answer)' –

+0

아니요, 하위 상태로 유지 될 수 있습니다. 기존 변수를 변경하는 대신 단일 값을 반환하려는 경우에만 함수로 변경합니다. –

+0

'ByVal'을 'ByRef'로 변경했지만 문제가 지속됩니까? –