我是Java新手...在C#中是否有类似于ReadKey()的方法以避免控制台应用程序关闭?
谢谢
如何从控制台读取单个字符/键而无需按Enter键?Sun的bug数据库中有一个旧条目声称无法在纯java中完成.我找到了这些方法
我希望magic-readkey.jar在我的类路径中添加一个,并编写几行代码,比如(def just-hit (com.acme.MagicConsole/read-char)).
我要启动一个控制台应用程序。问题是如何确定 CTRL 键是单独按下的,没有任何其他键。
using System;
using System.Text;
public class ConsoleKeyExample
{
public static void Main()
{
ConsoleKeyInfo input;
do
{
input = Console.ReadKey(true);
StringBuilder output = new StringBuilder(String.Format("You pressed {0}",input.Key.ToString()));
Console.WriteLine(output.ToString());
if ((input.Modifiers & ConsoleModifiers.Control) != 0)
{
Console.WriteLine("CTRL Pressed");
}
} while (input.Key != ConsoleKey.Escape);
}
}
Run Code Online (Sandbox Code Playgroud)
我想监视 CTRL 键的行为。跟踪此代码后,我在 readkey 行上放置了一个检查点,但是当我按下 CTRL 时,什么也没有发生,但是当我按下任何其他键(如“K”)时,它开始从键盘读取键。
我不明白我在这里缺少什么,但它似乎Console.ReadKey()仍然是活动的,并导致控制台Console.ReadLine()在调用后使用时输入两次Console.ReadKey().
我做了ReadKey()一个选择后上下搜索了如何逃避,但无济于事.
为了澄清,这是出乎意料的行为:当控制台弹出时,会向用户显示这三个选项作为示例.当用户输入"u"或"h"时,控制台不会等待; 它立即执行操作而无需用户按下Enter.
我做错了吗?
static void Main(string[] args)
{
Console.WriteLine("u up");
Console.WriteLine("h home");
Console.WriteLine("x exit");
Console.WriteLine("---------------------------------");
Console.WriteLine(" [Enter Your Selection]");
Console.WriteLine("---------------------------------");
Console.Write("Enter Selection: ");
ConsoleKeyInfo selection;
Console.TreatControlCAsInput = true;
int value;
selection = Console.ReadKey();
if (char.IsDigit(selection.KeyChar))
{
value = int.Parse(selection.KeyChar.ToString());
value -= 1;
Console.WriteLine("You've entered {0}", value);
}
else
{
switch (selection.Key)
{
case ConsoleKey.U:
blurp();
break;
case ConsoleKey.H:
blurp();
break;
case ConsoleKey.X:
System.Environment.Exit(0);
break;
default:
Console.WriteLine("Invalid Input...");
break; …Run Code Online (Sandbox Code Playgroud) 我试图运行我的代码直到Esc被按下.因此我ReadKey在我的控制台中使用
var input = Console.ReadKey();
do
{
} while (input.Key != ConsoleKey.Escape);
Run Code Online (Sandbox Code Playgroud)
但是在"ConsoleKey"它说,在'bool'中不可能使用ConsoleKey.我该如何解决这个问题?或者我应该使用什么呢?
我在ReadMode('cbreak')中使用Term :: ReadKey来读取单个字符并根据输入执行操作.这适用于箭头键以外的所有其他键.当按下箭头键时,动作执行3次,我明白这是因为箭头键转换为'^ [[A'等...
如何将箭头键转换为ReadKey可以解释的任意单个值?
我尝试了以下代码,但它不起作用:
use Term::ReadKey;
ReadMode('cbreak');
my $keystroke = '';
while ($keystroke ne 'h') {
print "Enter key: ";
#Read user keystroke
$keystroke = ReadKey(0);
chomp($keystroke);
if(ord($keystroke) == 27) {
$keystroke = ('0');
}
}
Run Code Online (Sandbox Code Playgroud)
这是基于建议的代码:
use Term::RawInput;
use strict;
use warnings;
my $keystroke = '';
my $special = '';
while(lc($keystroke) ne 'i' && lc($keystroke) ne 't'){
my $promptp = "Enter key: ";
($keystroke,$special) = rawInput($promptp, 1);
if ($keystroke ne '') {
print "You hit the normal …Run Code Online (Sandbox Code Playgroud) 我试图将用户输入密钥转换为int,用户将输入1到6之间的数字.
这是我到目前为止坐在一个方法中,它没有工作,但抛出格式异常是未处理的.
var UserInput = Console.ReadKey();
var Bowl = int.Parse(UserInput.ToString());
Console.WriteLine(Bowl);
if (Bowl == 5)
{
Console.WriteLine("OUT!!!!");
}
else
{
GenerateResult();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我正在寻找一个等待用户按下键的控制台功能。我希望它像Pascal的readkey一样;如仅控制台解决方案中那样。没有GUI库/图形库/窗口库/ WinApi调用(Windows)。它应该是跨平台的,并且(最好)是C std库或C ++类库的一部分。那么,有没有这样的函数/类方法?
是否可以向控制台应用程序提供Unicode输入,并通过Console.ReadKey()读取Unicode字符串/字符串?
我知道Unicode在通过其他方法读取输入时起作用,但不幸的是我需要使用ReadKey提供的"拦截"功能.
更新:
将U + 03BB(λ)等Unicode字符粘贴到控制台时,会读取3个键.
我试图看看这是否是某种编码,但看不到任何东西.
几个月前我刚刚开始学习编程,并决定做一个控制台蛇游戏.对于一件事,一切都很有希望.
如果我的蛇向上走,我按下箭头并按下它,我的蛇就停止了,在我停止按下按钮后停留一段时间.
同样的事情发生,如果我的蛇向右走,我按下右箭头太久,我失去控制一段时间(但蛇不停止).它发生在各个方面(左,右,上,下).
我试图将cki与另一个ConsoleKeyInfo进行比较,但它们之间有轻微的延迟,但这并不重要.如果我按下按键,我的程序就会保留该位置并更新密钥.(至少我认为这就是问题)
这是Console.ReadKey的"功能"还是有某种方法可以解决这个问题?
请记住,我刚刚开始,所以我还不知道高级的东西.
只要我不按键超过1秒钟,一切都能完美无瑕.
public void LiikutaMato() //movesnake
{
if (Console.KeyAvailable)
{
ConsoleKeyInfo cki;
cki = Console.ReadKey(true); // <-- I believe this is where it gets stuck
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Console.ReadKey()函数来拦截用户的击键并重建他们在屏幕上键入的内容(因为我需要经常清除屏幕,经常移动光标,这似乎比如最全面的方法,确保他们输入的内容不会消失或出现在整个屏幕上的随机点.
我的问题是:在做类似的事情时,有没有其他人经历过1个字符"滞后",因为缺乏更好的术语?说我想输入单词"This".当我按"T"时,无论我等多久都没有出现.当我按"h"时,出现"T"."我","h"出现.直到我按下另一个键,即使该键是空格键,我输入的字母也不会出现.有没有人对我做错了什么有任何建议?我确定它与我如何使用Console.Readkey有关,我只是看不出有什么替代方法可行.我在下面附上了一个简单的小例子.
谢谢!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication2
{
class Program
{
private static string userInput = "";
static ConsoleKeyInfo inf;
static StringBuilder input = new StringBuilder();
static void Main(string[] args)
{
Thread tickThread = new Thread(new ThreadStart(DrawScreen));
Thread userThread = new Thread(new ThreadStart(UserEventHandler));
tickThread.Start();
Thread.Sleep(1);
userThread.Start();
Thread.Sleep(20000);
tickThread.Abort();
userThread.Abort();
}
private static void DrawScreen()
{
while (true)
{
Console.Clear();
Console.SetCursorPosition(0, 0);
Console.Write("> " + userInput);
Thread.Sleep(300);
}
}
private static void UserEventHandler() …Run Code Online (Sandbox Code Playgroud)