2016-11-23 76 views
-2
Module Module1 

    Function UnexpectedInput(y, x) 

     Console.ForegroundColor = ConsoleColor.Red 
     Console.WriteLine("Unexpected Input ! (" & y & ") ") 
     Console.WriteLine("Please Try Again...") 
     Console.ResetColor() 

     Console.WriteLine("") 
     Return x 

    End Function 

    Dim choice As String 

    Sub Main() 

     Console.WriteLine("Please Register to use this program. If you already have an account please choose Loign.") 
     Space(1) 
     Console.WriteLine("1. Login ") 
     Console.WriteLine("2. Register ") 
     Console.WriteLine("3. Exit ") 
     Space(1) 
     Console.WriteLine("##########################") 
     choice = Console.ReadLine() 
     Console.WriteLine("##########################") 

     If choice = "1" Then 
      Console.WriteLine("Login()") 
      Console.ReadLine() 
     ElseIf choice = "2" Then 
      Console.WriteLine("Register()") 
      Console.ReadLine() 
     ElseIf choice = "3" Then 
      Console.WriteLine("Exitnow()") 
      Console.ReadLine() 
     Else 
      UnexpectedInput(choice, "Main()") 
     End If 

    End Sub 

End Module 

返回X不起作用,它只是關閉應用程序。我有它的工作,現在它不起作用。我完全卡住了,我是一個新手。Return語句意外關閉的應用程序

+1

當*** ***發揮作用時,您會發生什麼?它看起來像唯一會返回的是字符串「main()」 – Kritner

+0

我希望它返回到Main() 我想使用它,以便向用戶顯示他輸入的是意外的並將其返回給它是在 –

+0

然後你需要一個循環來做到這一點。循環直到滿足一些條件。你之前是如何工作的? – LarsTech

回答

0

return x不起作用它只是關閉應用程序。

嗯,當然,它的作用。它從UnexpectedInput函數返回,返回到Main,然後完成Main子例程,從而導致您的應用程序自動關閉。通過思考代碼的邏輯,你應該能夠自己弄清楚這一點。即使您無法完全在您的腦海中進行這種跟蹤,您也可以通過單步執行代碼,藉助內置於Visual Studio中的調試程序完成此操作。 (這是爲了練一個很好的方式,以及用於調試困難的問題至關重要)

Main,您有以下If構造:

If choice = "1" Then 
     Console.WriteLine("Login()") 
     Console.ReadLine() 
    ElseIf choice = "2" Then 
     Console.WriteLine("Register()") 
     Console.ReadLine() 
    ElseIf choice = "3" Then 
     Console.WriteLine("Exitnow()") 
     Console.ReadLine() 
    Else 
     UnexpectedInput(choice, "Main()") 
    End If 

如果輸入既不是1,2,也不是3,那麼將會輸入Else子句。這將導致UnexpectedInput函數被調用,從而有效地跳轉到那一點。代碼會從這裏開始運行:

Console.ForegroundColor = ConsoleColor.Red 
    Console.WriteLine("Unexpected Input ! (" & y & ") ") 
    Console.WriteLine("Please Try Again...") 
    Console.ResetColor() 

    Console.WriteLine("") 
    Return x 

這將打印一些東西到控制檯,然後將值x返回給調用者。

去返回給調用者:

UnexpectedInput(choice, "Main()") 

你會發現,來電者完全忽略函數的返回值。它不會將其分配給變量供以後使用,也不會直接使用它。它只是拋棄它,就像它是一個Sub,而不是一個Function。這是完全允許的,如果忽略函數的返回值,編譯器甚至不會發出警告。你需要通過閱讀和理解代碼的流程/邏輯來自己檢查。

執行並從UnexpectedInput返回後,控制流程繼續執行Main子例程。除了Main子例程中沒有其他代碼可以執行! If結構結束,然後Main結束。一旦Main結束,根據VB.NET語言的規則,整個程序結束。因此,運行時庫自動關閉您的應用程序。

如果您的問題很簡單,就是控制檯窗口正在關閉太快,給你看的輸出,那麼你可以通過運行應用程序解決問題按Ctrl + F5 。這會在沒有附加調試器的情況下啓動程序,並且而不是允許控制檯窗口自動關閉。相反,它會等待你在關閉之前按下一個鍵。

此外,作爲在評論中建議,如果你希望允許用戶輸入一個選擇時,他們的第一個是無效的,那麼你就需要來包裝。如果在一個循環構建。 While循環運行良好;請參閱您最喜愛的VB.NET編程參考資料以獲取更多信息。在遇到有效輸入時跳出While循環;否則,繼續循環直到遇到有效輸入(或用戶選擇退出)。