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不起作用它只是关闭应用程序。我有它工作,现在它不起作用。我完全陷入困境,我是新手。
答案 0 :(得分: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 。这将启动程序而不附加调试器,并且不允许控制台窗口自动关闭。相反,它会等待你在关闭之前按下一个键。
或者,正如评论中所建议的那样,如果您希望允许用户在第一个选项无效时输入另一个选项,那么您需要将If构造包装在循环中。 While循环运行良好;有关更多信息,请参阅您最喜欢的VB.NET编程参考。遇到有效输入时,跳出While循环;否则,继续循环直到遇到有效输入(或用户选择退出)。