Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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#_.net_While Loop - Fatal编程技术网

C# 而循环不';不能在错误的条件下退出

C# 而循环不';不能在错误的条件下退出,c#,.net,while-loop,C#,.net,While Loop,循环工作正常: 产出1: 输入名称: 约翰 输入姓氏: 彼得 输入名称: 杰克 输入姓氏: 安德鲁 输出2:(尝试在点A处断开循环) 输入名称: //循环未退出,但转到下一条语句 while (true) { Console.WriteLine("Enter Name:"); name = Console.ReadLine(); // Point A if(name =="A") break; Console.WriteLine("Enter Su

循环工作正常:

产出1:

输入名称:

约翰

输入姓氏:

彼得

输入名称:

杰克

输入姓氏:

安德鲁

输出2:(尝试在点A处断开循环)

输入名称:

//循环未退出,但转到下一条语句

while (true)
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if(name =="A")
        break;
    Console.WriteLine("Enter Surname:");
    surname = Console.ReadLine(); // Point B
    if(surname == "A")
        break;
 }
输入姓氏:

彼得

哎呀

当我试图在A点中断循环时,循环不会退出,而是转到下一个语句,然后在B点之后退出


问题:为什么它不在点处退出循环?我如何使它在点A处退出?

循环条件将在进入整个代码块之前进行检查,而不是在代码中的每个语句执行之后。您可以添加条件以执行第二部分或中断循环或强制检查循环条件

打破循环:

static void Main(string[] args)
{
    string name = null, surname = null;
    while (name != "A" && surname != "A")
    {
        Console.WriteLine("Enter Name:");
        name = Console.ReadLine(); // Point A
        Console.WriteLine("Enter Surname:");
        surname = Console.ReadLine(); // Point B
    }
    Console.WriteLine("Oops");
    Console.ReadLine();
}

设置执行其余代码的条件:

while (name != "A" && surname != "A")
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if (name == "A")
        break;
    Console.WriteLine("Enter Surname:");
    surname = Console.ReadLine(); // Point B
}
while (name != "A" && surname != "A")
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if (name != "A")
    {
        Console.WriteLine("Enter Surname:");
        surname = Console.ReadLine(); // Point B
    }
}

强制检查循环条件(继续后的代码将不执行):

while (name != "A" && surname != "A")
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if (name == "A")
        break;
    Console.WriteLine("Enter Surname:");
    surname = Console.ReadLine(); // Point B
}
while (name != "A" && surname != "A")
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if (name != "A")
    {
        Console.WriteLine("Enter Surname:");
        surname = Console.ReadLine(); // Point B
    }
}

只有当while循环中的所有代码都已处理时,才会在该点检查该条件。因此,一切正常。

您可以更改循环块

while (true)
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if (name=="A")
    {
        return;
    }
    Console.WriteLine("Enter Surname:");
    surname = Console.ReadLine(); // Point B
    if (surname=="A")
    {
        return;
    }
}

只有在执行整个循环体时,才会检查循环条件。如果您想打破循环,可以使用以下语句

while (true)
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if(name =="A")
        break;
    Console.WriteLine("Enter Surname:");
    surname = Console.ReadLine(); // Point B
    if(surname == "A")
        break;
 }

循环将在重新检查循环的条件之前,检查所有指令

您可以使用if语句检查name是“A”还是“A”,然后使用
break
命令(如果计算结果为true),使其在点A处退出

if(name==“A”| name==“A”)

中断

他们只是嫉妒你在睡觉时能正确回答:)谢谢,你的第一个例子将非常适合我的项目。我想说的是,尽管第一个例子提供了最快速、最容易理解的解决方案,但我建议不要打破循环。另外两个例子在长期维护和可读性方面更好,而且如果您决定在以后某个时间点扩展循环,也不太可能导致规避性错误。@Paulch先生,我也支持您!谢谢你的意见,我会考虑的。