这是我的代码:
Dim Choice As String
Dim FinalChoice As Integer
Console.Writeline("Insert the number 1 or 2")
Choice = Console.Readline
'Verification
Do
'Invalid
If Choice <> "1" Or Choice <> "2" Then
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("Not a valid input")
Console.WriteLine("Please try again")
Console.ForegroundColor = ConsoleColor.Gray
Choice = Console.ReadLine
'Valid
Else
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine("Valid")
Console.ForegroundColor = ConsoleColor.Gray
FinalChoice = Choice
End If
Loop Until FinalChoice = 1 Or FinalChoice = 2
正如您所看到的,代码没有像我想的那样。
请有人向我解释我做错了什么?
答案 0 :(得分:1)
当您使用OR
运算符时,如果 子条件为true,则整个复合条件为真。因此,如果CHOICE = "1"
,则子条件CHOICE <> "2"
为真,因此整个条件为真。
如果您只想允许两种可能的选择,那么如果子条件1 和 子条件2都无效,则您希望陷入无效情况 - 如果其中任何一个< em>有效,您需要像处理选择一样进行处理。
因此,您的情况应为IF CHOICE <> "1" AND CHOICE <> "2"
。
答案 1 :(得分:1)
我想您希望程序循环直到用户输入1
或2
。
行If Choice <> "1" Or Choice <> "2" Then
转换为选项不是1或选项不是2,则输入无效。
现在,如果您输入的1
符合条件Choice <> "2"
,则无效。当用户输入2
和选择&lt;&gt;时也是如此。 “1”
您应该将中间的Or
更改为And
,我认为您会看到所需的结果。
答案 2 :(得分:0)
使用正确的操作员纠正您的解决方案。
Console.WriteLine("Insert the number 1 or 2")
Choice = Console.ReadLine
'Verification
Do
'Invalid
If Choice <> "1" AndAlso Choice <> "2" Then
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("Not a valid input")
Console.WriteLine("Please try again")
Console.ForegroundColor = ConsoleColor.Gray
Choice = Console.ReadLine
'Valid
Else
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine("Valid")
Console.ForegroundColor = ConsoleColor.Gray
FinalChoice = Integer.Parse(Choice)
End If
Loop Until FinalChoice = 1 Or FinalChoice = 2
注意使用And,AndAlso的短路版本。此外,FinalChoice的分配也已修复。
替代
'Verification
Do
If Integer.TryParse(Choice, FinalChoice) AndAlso
(FinalChoice = 1 OrElse FinalChoice = 2) Then
'valid
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine("Valid")
Console.ForegroundColor = ConsoleColor.Gray
Else
'invalid
FinalChoice = 0
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("Not a valid input")
Console.WriteLine("Please try again")
Console.ForegroundColor = ConsoleColor.Gray
Choice = Console.ReadLine
End If
Loop While FinalChoice = 0