2013-07-27 52 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 
}