Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
C# 当循环未正确检查所有条件时?_C#_While Loop - Fatal编程技术网

C# 当循环未正确检查所有条件时?

C# 当循环未正确检查所有条件时?,c#,while-loop,C#,While Loop,因此,赋值如下:您可以输入各种数字,但当您连续输入两次0时,它需要停止。第一次输入数字时,不允许输入0 这是我设置的代码: class MainClass { public static void Main (string[] args) { int givenNumber, prevNumber; Console.WriteLine ("Enter a number: "); int.TryParse (Console.ReadL

因此,赋值如下:您可以输入各种数字,但当您连续输入两次0时,它需要停止。第一次输入数字时,不允许输入0

这是我设置的代码:

class MainClass
{
    public static void Main (string[] args)
    {
        int givenNumber, prevNumber;
        Console.WriteLine ("Enter a number: ");
        int.TryParse (Console.ReadLine (), out givenNumber);
        // I've set the prevNumber to givenNumber because the variable has to be initialized
        // before I can use it in the condition below. I thought setting it to the giveNumber
        // wouldn't harm. Note that the first time your not allowed to enter 0
        prevNumber = givenNumber;
        while (givenNumber != 0 && prevNumber != 0) {
            prevNumber = givenNumber; //Here is where they both are 0 at a given moment, but only after the condition.
            Console.WriteLine ("Enter a number: ");
            int.TryParse (Console.ReadLine (), out givenNumber);
        }
        Console.WriteLine ("Tada");
    }
}
问题是,当您只输入了一个0时,它已经停止。例如,如果我首先输入一个7,那么我的下一个数字将是0。当我调试它时,它说我的givenNumber是0,prevNumber是7,当它返回while条件时,它停止并完成。当程序完成调试时,会清楚地显示prevNumber=7和givenNumber=0。我使用的是条件句和正确句,不是吗

有线索吗?我不允许在这件事上使用数组

提前感谢(givenNumber!=0和&prevNumber!=0)

对于从控制台读取的第一个值-编号7 givenNumer将是7岁 prevNumber也将是7(因为分配prevNumber=givenNumber;) 因此,(7!=0&&7!=0)将通过

从控制台第二次读取-编号0
因此,(0!=0&&7!=0)将不会通过,因为0!=0为FALSE,而如果条件为result为FALSE,则循环结束

Ooh,没错,您的逻辑是错误的。应该是这样的:

while ((givenNumber != 0) || (prevNumber != 0)) {

查找原因…

您的问题在于您的条件语句

现在您正在检查givenNumber和PrevNumber是否都不等于0

因此,如果它们都不等于0,那么该语句的计算结果将为TRUE。但是,如果其中一个数字为0,则该语句的计算结果将为FALSE,因为(TRUE)&&(FALSE)的计算结果将为FALSE


有两种方法可以解决这个问题:您可以在两个“!=”语句中使用| |(或”运算符),也可以对整个语句进行求反,并使用正则等式而不是“!=”本身:!(givenNumber==0&&prevNumber==0)

像这样尝试:
而((givenNumber!=0)&&&prevNumber!=0)){
@RBarryYoung尝试了但没有成功