C#:WHILE循环继续,似乎忽略了条件
C#: WHILE loop continues, seemingly ignoring the condition
我正在编写一个基本的问答程序来帮助自己熟悉 C#。我正处于开发的早期阶段,运行 遇到了一个我很难理解的问题。这是代码,后面是我迄今为止尝试过的代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TriviaProject
{
internal class Program
{
static void Main(string[] args)
{
var q1 = "x";
int totalCorrect = 0;
int totalIncorrect = 0;
Console.WriteLine("Question 1: What is the answer?");
Console.WriteLine("A. Correct Answer");
Console.WriteLine("B. Incorrect Answer");
Console.WriteLine("C. Incorrect Answer");
while (q1 != "A" || q1 != "B" || q1 != "C")
{
q1 = Console.ReadLine();
switch (q1)
{
case "A":
Console.WriteLine("{0} is the correct Answer!", q1);
++totalCorrect;
break;
case "B":
Console.WriteLine("{0} is not correct.", q1);
++totalIncorrect;
break;
case "C":
Console.WriteLine("{0} is not correct.", q1);
++totalIncorrect;
break;
default:
Console.WriteLine("{0} is not a valid entry. A, B or C.", q1);
break;
}
}
Console.WriteLine("You got {0} correct and {1} incorrect. Your total score is: ", totalCorrect, totalIncorrect);
}
}
}
期望的行为
如果答案是 A,则应增加并显示 totalCorrect 计数。如果答案是 B 或 C,则应增加并显示 totalIncorrect 计数。
到目前为止已尝试
- 如果我从 WHILE 语句中删除 B 和 C,如果我回答“A”,程序将按预期运行
- 为了补救上述情况,我将 B 和 C 添加到 WHILE 语句中,假设我在回答 B 和 C 时会看到类似的行为
- 当 B 和 C 包含在 While 语句中时,我得到了正确的反馈(正确或不正确),但无论我输入什么,循环都会继续(程序永远不会移动到结果)
我也尝试过使用 CONTINUE 而不是 BREAK 的不同组合。
如果有人能解释这种行为,我们将不胜感激。
从逻辑上讲,您的 while 循环是 while (true)
。
q1 != "A"
如果q1是A则为假,否则为真
q1 != "B"
如果q1是B则为假,否则为真
因为 A 不是 B,所以这两个陈述不可能同时为假,所以你有
- A) 错误 ||真
- B) 正确 ||假
- 其他)正确||真
因为 true-or-anything 为 true,你的条件就是 true
。
我正在编写一个基本的问答程序来帮助自己熟悉 C#。我正处于开发的早期阶段,运行 遇到了一个我很难理解的问题。这是代码,后面是我迄今为止尝试过的代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TriviaProject
{
internal class Program
{
static void Main(string[] args)
{
var q1 = "x";
int totalCorrect = 0;
int totalIncorrect = 0;
Console.WriteLine("Question 1: What is the answer?");
Console.WriteLine("A. Correct Answer");
Console.WriteLine("B. Incorrect Answer");
Console.WriteLine("C. Incorrect Answer");
while (q1 != "A" || q1 != "B" || q1 != "C")
{
q1 = Console.ReadLine();
switch (q1)
{
case "A":
Console.WriteLine("{0} is the correct Answer!", q1);
++totalCorrect;
break;
case "B":
Console.WriteLine("{0} is not correct.", q1);
++totalIncorrect;
break;
case "C":
Console.WriteLine("{0} is not correct.", q1);
++totalIncorrect;
break;
default:
Console.WriteLine("{0} is not a valid entry. A, B or C.", q1);
break;
}
}
Console.WriteLine("You got {0} correct and {1} incorrect. Your total score is: ", totalCorrect, totalIncorrect);
}
}
}
期望的行为 如果答案是 A,则应增加并显示 totalCorrect 计数。如果答案是 B 或 C,则应增加并显示 totalIncorrect 计数。
到目前为止已尝试
- 如果我从 WHILE 语句中删除 B 和 C,如果我回答“A”,程序将按预期运行
- 为了补救上述情况,我将 B 和 C 添加到 WHILE 语句中,假设我在回答 B 和 C 时会看到类似的行为
- 当 B 和 C 包含在 While 语句中时,我得到了正确的反馈(正确或不正确),但无论我输入什么,循环都会继续(程序永远不会移动到结果)
我也尝试过使用 CONTINUE 而不是 BREAK 的不同组合。
如果有人能解释这种行为,我们将不胜感激。
从逻辑上讲,您的 while 循环是 while (true)
。
q1 != "A"
如果q1是A则为假,否则为真
q1 != "B"
如果q1是B则为假,否则为真
因为 A 不是 B,所以这两个陈述不可能同时为假,所以你有
- A) 错误 ||真
- B) 正确 ||假
- 其他)正确||真
因为 true-or-anything 为 true,你的条件就是 true
。