Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在用户决定退出之前,VB.NET是否有整个程序循环?_Vb.net_Loops_Console - Fatal编程技术网

在用户决定退出之前,VB.NET是否有整个程序循环?

在用户决定退出之前,VB.NET是否有整个程序循环?,vb.net,loops,console,Vb.net,Loops,Console,我有一个简单的程序来平均十个(用户定义的)数字,然后打印结果。在程序结束时,我想打印,你想平均一组新的数字吗?(Y/N)如果用户输入了Y,则我希望程序从顶部再次执行。如果用户输入n,则程序应关闭。我已经尝试过研究这个问题,但只找到了让整个控制台退出并重新打开的方法,这不是我想要的 要检测用户输入的内容,您有两个选项: Console.ReadKey() 将读取下一次击键。然后,您可以使用一个简单的selectcase分支来选择要执行的操作 您还可以使用: Console.ReadLine()

我有一个简单的程序来平均十个(用户定义的)数字,然后打印结果。在程序结束时,我想打印
,你想平均一组新的数字吗?(Y/N)
如果用户输入了
Y
,则我希望程序从顶部再次执行。如果用户输入
n
,则程序应关闭。我已经尝试过研究这个问题,但只找到了让整个控制台退出并重新打开的方法,这不是我想要的

要检测用户输入的内容,您有两个选项:

Console.ReadKey()
将读取下一次击键。然后,您可以使用一个简单的
selectcase
分支来选择要执行的操作

您还可以使用:

Console.ReadLine()
它将返回一个字符串(在用户按enter键后)。然后,您可以使用一个简单的If语句来确定字符串中的内容(如果输入了“y”或“n”以外的内容,则重复查询)

例如:

Shared Sub Main()    
    While True
        AverageNums()
        Console.WriteLine( "Do you want to run again? (Y/N)" )
        Dim key = Console.ReadKey()
        If key.Key = ConsoleKey.N Then
            Exit While
        End If
    End While    
End Sub

Shared Sub AverageNums()
    ' ...
End Sub

我的回答可能在游戏中有点晚了,但我想我应该分享一个实现try-catch方法的紧凑版本

Sub-Main()
做
尝试
编写(“输入值:”)
Console.ReadLine()
'...
某些程序()
特例
控制台写入线(例如ToString)
最后
Console.Write(“输入另一个值?(N表示否)”)
结束尝试
循环直到Console.ReadLine()=“N”
端接头
次级程序()
'...
端接头

如果
ConsoleKey.Key==ConsoleKey.Y
,您不能递归调用
Main(args)
吗?您能详细说明一下吗?我只是自学VB.NET,所以我对很多技术都不太熟悉。我是一个C#guy,所以我提供的任何代码都不熟悉,但在控制台应用程序中,通常有一个
静态void Main(string[]args)
,这是控制台应用程序的入口点-因此当你调用完你正在调用的任何东西时,询问用户输入,如果他们按Y键,再次调用Main方法重新开始…@SpaceBison-递归调用可能会导致问题。首先,如果调用的次数足够多,则最终会出现堆栈溢出(诚然,这将是很多次……但仍然如此)。其次,如果在“y/n”之后有任何“清理”,那么当堆栈展开时,清理可能会发生很多次。我不建议编程新手使用递归函数调用。我接受你关于初学者和陷阱的观点,但我在控制台应用程序中使用递归调用没有问题,但那是因为我知道如何严格控制它。对于我来说,作为一个初学者,我想引起堆栈溢出并理解原因,然后解决它:)-无论如何,您的解决方案更适合OPs的情况,因此+1't感谢您的示例!这是非常有教育意义的边做边学。我不知道,或者我没有想到你实际上可以有多个
Sub-Main()
语句。@Matt-它们被称为“方法”(
Sub
)或“函数”(
Function
)(关键字“Sub”是基于旧的“子例程”概念)您可以在一个类中声明任意数量的对象—唯一需要注意的是每个对象必须有不同的名称(直到您了解重载)。快乐学习。