VB 2017单词与元音计数控制台程序无输出问题求助
问题排查与修复方案
嘿,我帮你找到问题所在了!你的代码之所以看不到Console.WriteLine的输出,核心原因是死循环把程序卡住了,还有几个语法和逻辑错误,咱们一步步拆解修复:
头号问题:死循环导致程序卡壳
在Words和Vowels这两个子程序里,你声明了Index变量,但从头到尾都没在循环里让它递增!Do Until Index = Len(Input)这个退出条件永远满足不了,程序会一直卡在循环里,根本没机会执行到后面的输出语句。
其他需要修正的细节
单个字符获取方式错了
你用Input.Substring(Index)想拿单个字符,但这个方法会返回从Index位置开始到字符串结尾的所有内容,不是单个字符。改成Input(Index)就行——VB里字符串可以直接用索引访问单个字符,或者用Input.Substring(Index, 1)截取单个字符也可以。Vowels子程序的逻辑完全跑偏
- 你写的
If Character = Vowels(Index)完全不对:Vowels(Index)是取元音数组里对应索引的元素,但Index是当前遍历字符串的位置,和元音数组半毛钱关系都没有!应该是检查当前字符是不是元音数组里的任意一个元素。 Count = +1是语法错误,正确的递增写法是Count += 1或者Count = Count + 1。- 元音数组是
String类型,Character是Char类型,类型不匹配,把数组改成Char类型:Dim Vowels() As Char = {"A"c, "E"c, "I"c, "O"c, "U"c}。
- 你写的
Words子程序的单词计数有bug
单纯数空格数来算单词数会踩坑:比如句子开头/结尾有空格、多个连续空格时,会多算单词数。我给你改成了更可靠的逻辑,能处理这些情况。
修复后的完整代码
Module Module1 Sub Main() Dim Sentence As String Console.WriteLine("Sentence Analysis") Console.WriteLine() Console.WriteLine("Enter a sentence then press 'Enter'") Console.WriteLine() Sentence = Console.ReadLine() Sentence = Sentence.ToUpper() Call Words(Sentence) Call Vowels(Sentence) Console.ReadLine() End Sub Sub Words(ByVal Input As String) ' 处理空输入的情况 If String.IsNullOrWhiteSpace(Input) Then Console.WriteLine("Your sentence contains 0 words.") Return End If Dim Count As Integer = 1 ' 非空句子至少有1个单词 Dim Index As Short = 0 Dim Character As Char Do Until Index = Len(Input) Character = Input(Index) If Character = " "c Then ' 跳过连续的空格,避免重复计数 Do While Index < Len(Input) AndAlso Input(Index) = " "c Index += 1 Loop ' 只有还没到字符串结尾时,才增加单词计数 If Index < Len(Input) Then Count += 1 End If Else Index += 1 End If Loop Console.WriteLine("Your sentence contains {0} words.", Count) End Sub Sub Vowels(ByVal Input As String) Dim Count As Integer = 0 Dim Vowels() As Char = {"A"c, "E"c, "I"c, "O"c, "U"c} Dim Index As Short = 0 Dim Character As Char Do Until Index = Len(Input) Character = Input(Index) ' 检查当前字符是否在元音数组里 If Array.IndexOf(Vowels, Character) <> -1 Then Count += 1 End If Index += 1 ' 必须让索引递增,否则又死循环! Loop Console.WriteLine("Your sentence contains {0} vowels.", Count) End Sub End Module
修复要点总结
- 在两个子程序的循环里都加了
Index += 1(或对应逻辑),确保循环能正常退出,程序能走到输出语句。 - 修正了单个字符的获取方式,现在能正确拿到每个字符。
- 改进了单词计数逻辑,能处理空输入、开头/结尾空格、连续空格的情况。
- 修正了元音统计的逻辑,现在能正确识别每个元音字符,还把输出里的错误单词"words"改成了"vowels"。
内容的提问来源于stack exchange,提问作者George Hales
相关产品推荐
相关产品推荐

