C# DoWhile loop的行为(对我来说)很奇怪。有人能解释一下吗?

C# DoWhile loop的行为(对我来说)很奇怪。有人能解释一下吗?,c#,do-while,C#,Do While,我通常做Java编程,但想用C来测试我的运气,看看它是什么样子。我更像是一个新手程序员,所以这可能很愚蠢,但在我的Do-While循环中,为什么只有在尝试终止循环时使用&&而不是| |时它才起作用?对我来说,在Java中,将使用| |,因为您希望大写或小写“q”终止。我把终止读作“Q”和“Q”。显然情况并非如此,因为循环结束得很好。我只是不明白这是怎么回事 namespace Testing_Grounds { class Program { static voi

我通常做Java编程,但想用C来测试我的运气,看看它是什么样子。我更像是一个新手程序员,所以这可能很愚蠢,但在我的Do-While循环中,为什么只有在尝试终止循环时使用&&而不是| |时它才起作用?对我来说,在Java中,将使用| |,因为您希望大写或小写“q”终止。我把终止读作“Q”和“Q”。显然情况并非如此,因为循环结束得很好。我只是不明白这是怎么回事

namespace Testing_Grounds
{
    class Program
    {
        static void Main(string[] args)
        {
            string entry;

            do
            {
                Console.WriteLine("This is an inventory screen");
                Console.WriteLine("1. Health Potions");
                Console.WriteLine("2. Mana Potions");
                Console.WriteLine("3. Revive Potions");
                Console.Write("Please enter the number of the item " +
                    "you would like to inspect, or enter \"Q\" to quit: ");
                entry = Console.ReadLine();

                if (entry.Equals("1"))
                {
                    Console.WriteLine("Health Potions");
                }
                else if (entry.Equals("2"))
                {
                    Console.WriteLine("Mana Potions");
                }
            } while (entry != "Q" && entry != "q");
        }
    }
}

do
/
while
循环条件指定何时应再次执行循环,而不是何时应退出循环。这就是为什么您需要
&&


我很确定它在Java中的工作方式完全相同。

标准是继续,而不是终止。如果您使用
| |
,您会说“如果条目不是Q或它不是Q,则继续循环”,这总是正确的(条目不能同时是两者),因此您永远不会退出<代码>&在两种语言中都是正确的逻辑。

|
&
在这方面在C#和Java中的工作方式相同

entry!=“Q”&输入!=当字符与所需的
q
q
不同时,“q”
(和)将继续循环


entry!=“Q”| |进入!=“q”
(或)对于任何字符都是正确的,因为字符总是不同于
q
q
,因此循环永远不会终止。

在Java或C#(或任何编程语言)中
条件运算符
没有区别,因为它们是基本的编程概念。你理解错了

你想做的是

while (entry != "Q" && entry != "q"); 
因此,
条目
变量在任何实例点(实例平均时间)只能保存一个值。因此,在任何时候,它要么是
Q
要么是
Q
,而不是
两者都是
。你应该像这样做

while (entry != "Q" || entry != "q");

此外,您的
条目
变量只存储一个char值;那么为什么要将其声明为
字符串
。而应该声明为
char
,这样可以节省内存。

do。。。而
循环工作正常。正如其他人所说,当条件声明变成错误时,它将终止。您在这里遇到的与
|
&&
的混淆可能是由于编写相同条件的不同方式造成的:

entry!=“Q”&输入!=“q”

!(条目==“Q”|条目==“Q”)

报告说:

连接的否定是否定的析取


-1:它的工作原理和Java完全一样。我想这就是我反复强调我是一个新手程序员的地方。我仔细查看了一下是否有反例,但它们只存在于我的“if”语句中(以或vs.AND的形式)。新手程序员应该假设它们是错误的。在他们的情况下,这通常是正确的。@Zachfeedler+1,因为你很酷。继续编码:)谢谢,@DimitarDimitrovt这有助于我进一步理解。正如我在对这个问题的评论中所说,我的反例是在使用IF语句的过程中。我想我需要花更多的时间来分析循环是如何实际工作和结束的。一个是“继续而真实”,另一个是“如果真实,那么就这样做”。它们非常相似,我相信你很快就会掌握的。祝你好运我一定会记住这一点。在过去的两门大学级Java编程课程中,我读错了这本书,这让我有点沮丧。但无论如何,谢谢你,这是非常有用的!随着我的进步,我将继续尽我所能提高效率。最初,我让它拉入一个int值,花了一段时间才弄明白如何做:在java中,我只会说int entry=stdIn.NextInt();今天到此为止。在C#(除非我没有找到一种方法)中,我必须学习如何使用parse命令;我想我在这里读到的每一个答案都开始理解它的基本方面。更具体地说,我一直从循环何时终止而不是循环何时继续的角度来看待它。我会记住这一点!哈我喜欢这句话,它实际上让我笑了。我必须阅读更多关于德·摩根的内容,以便更好地理解这一点,但我现在已经掌握了要点。我想我困惑的一部分肯定是我的新手身份,但正如你所提到的,达到同一点的不同方式。正如其他人所说,我肯定是从错误的角度阅读了这个循环。我从一个终止点看它,而我应该从一个继续点看它。@ZachFiedler作为旁注,我现在记得的唯一一个有终止条件而不是继续条件的循环是从Pascal开始的。非常感谢!我正在阅读所有这些,以帮助巩固这一基本逻辑。在过去的两门大学Java课程中,我一直读错了:/