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();
}
循环工作正常:
输出1:
输入姓名:
约翰
输入姓氏:
彼得
输入姓名:
杰克
输入姓氏:
安德鲁
输出2 :(尝试在A点打破循环)
输入姓名:
//循环没有退出但是转到了下一个声明
输入姓氏:
彼得
糟糕
当我尝试在A点打破循环时,循环不会退出,但转到下一个语句然后在B点之后退出
问题:为什么它不会在点退出循环,如何让它在A点退出?
答案 0 :(得分:13)
在进入整个代码块之前,将完全检查循环条件,而不是在代码中的每个语句执行之后。您可以添加条件来执行第二部分或中断循环或强制检查循环条件。
突破循环:
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")
continue;
Console.WriteLine("Enter Surname:");
surname = Console.ReadLine(); // Point B
}
答案 1 :(得分:1)
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;
}
}
答案 2 :(得分:1)
仅在处理了while循环中的所有代码时才检查条件。所以一切正常。
答案 3 :(得分:0)
您可以更改循环块。
⌘ ~/Documents/foo/foo/ (foo-550) git checkout master
error: The following untracked working tree files would be overwritten by checkout:
application/models/foo_nrds_model.php
Please move or remove them before you can switch branches.
Aborting
⌘ ~/Documents/foo/foo/ (foo-550) git status
On branch foo-550
Your branch is up-to-date with 'origin/foo-550'.
nothing to commit, working directory clean
答案 4 :(得分:0)
只有在每个循环体执行完毕后才会检查循环条件。如果您想要摆脱循环,可以使用break
语句
static void Main(string[] args)
{
string name = null, surname = null;
while (surname != "A")
{
Console.WriteLine("Enter Name:");
name = Console.ReadLine(); // Point A
if (name == "A")
{
break;
}
Console.WriteLine("Enter Surname:");
surname = Console.ReadLine(); // Point B
}
Console.WriteLine("Oops");
Console.ReadLine();
}
答案 5 :(得分:0)
循环将在重新检查循环条件之前完成所有指令。
您可以使用if语句检查名称是否为" A"或" a"然后使用break
命令,如果它的计算结果为真。
if(name == "A" || name == "a")
break;