2015-06-24 31 views
2
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循环做虚假情况不会退出

输出1:

输入名称:

约翰

输入姓:

彼得

输入名称:

杰克

输入姓:

安德鲁

输出2:(试图突破A点环路)

输入名称:

一个//循环没有退出,但去了下一条语句

输入姓:

彼得

哎呀

当我试图打破在A点的循环,循环不退出,但进入下一语句,然后退出后B点

问题:为什么它不在点退出循环,我怎样才能让它在A点退出?

回答

11

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

突围循环:

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 
    } 
} 

部队检查循环条件(后代码ntinue将不执行):

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 
} 
+4

他们只是嫉妒你能正确回答在睡觉:) – sstan

+0

谢谢,你的第一个例子会非常适合我的项目。 –

+2

我想说的是,尽管第一个例子提供了最快速,最易理解的解决方案,但我建议不要打破循环。另外两个例子在长​​期维护和可读性方面更好,如果您决定在稍后的时间点扩展循环,也不太可能引起回避性错误。 – MrPaulch

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; 
    } 
} 
1

的条件仅在一点上,当在while循环的所有代码已处理检查。所以一切正常。

0

您可以更改您的循环块。

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; 
} 
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(); 
} 
0

环路是要经过所有指令就重新检查循环的条件之前。

您可以通过使用if语句来检查名称是“A”还是“a”,然后在其值为“真”时使用break命令使其在A点退出。

if(name == "A" || name == "a") break;