2015-06-24 26 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;