2013-07-27 51 views
-3

我正在嘗試中斷;出於挫折。在控制檯中是否需要了解一個事件處理程序?無限循環即使當我關閉大寫鎖定

Infinite loop

+0

見http://cboard.cprogramming.com/csharp-programming/105103-how-detect-capslock-csharp。 html – user1929959

+1

請不要粘貼您的代碼的圖片。粘貼實際文字。 – Amy

+0

你有毛絨熊或橡皮鴨嗎?如果沒有,你必須得到一個。然後,請使用它。 https://en.wikipedia.org/wiki/Rubber_duck_debugging –

回答

6

你只設置的capslock值一次,在進入循環之前。 bool是一種值類型,因此您可以獲得Console.CapsLock屬性的副本,而不是對其的引用。第一次分配後,你的變量永遠不會改變數值。你想要的是一樣的東西:

while(Console.CapsLock) 
{ 
    // inform user, perhaps remove the loop and just tell them once 
} 

或者

capslock = Console.CapsLock; 
while(capslock) 
{ 
    Console.WriteLine("CapsLock on"); 
    capslock = Console.CapsLock; 
} 

在一個側面說明,在一個循環中儘可能快地寫一個消息可能是一個糟糕的主意,因爲它只是要填補在用戶有機會做任何事情之前進行屏幕顯示。

+0

是的,我會使用thread.sleep和console.clear(),別擔心 – DavMar

+0

@MarietjieDavel:如果你使用'Thread.Sleep',你可能正在做一些事情錯誤。 –

-4

這種問題的解決方案!

This worked!!!

+2

請停止發佈您的代碼圖片。有一個按鈕在網站上使代碼看起來正確{'}'複製並粘貼您的代碼,突出顯示它,然後按下該圖標。 –

1

不回答你原來的問題,但它似乎要檢查了使用外蓋的原因鎖是你想要的將被輸入在所有小寫,所以你可以做一個類似users.Contains(username)什麼用戶名低於您在屏幕截圖中提供的位置。

更好的方法是使用contains過載讓你設置一個比較器,然後使用不區分大小寫的字符串比較器來測試。

if(users.contains(username, StringComparer.OrdinalIgnoreCase)) 
{ 
    //username existed 
} 
else 
{ 
    //username did not exist 
} 

有用於String.Equals類似的重載,可以讓你忽略大小寫太

//This would return true if "username = marietjie" and "testUsername = MARIETJIE" 
if(username.Equals(testUsername, StringComparison.OrdinalIgnoreCase)) 
{ 
    //username matched 
} 
else 
{ 
    //username did not match 
}