我在(c#)dos窗口下编一个输出三角形的程序。通过consolekey获取键值来判定是否为esc键并退出,通过console.readline()获取要打印的三角形行数。 但这样输入数字的时候需要按两次(consolekey 和readline)--比如输入行数3,需要将3键按两次,怎么解决比较好?
部分代码如下
...
if ((key = Console.ReadKey(true).Key) != ConsoleKey.Escape)
//判断用户是否按下esc键,不是则继续
{
try
{
lines = int.Parse(console.readline());
}
catch
{ Console.WriteLine("请输入正确的整数值!");
continue;
}
.........能用readkey获取输入的数值吗?但这个只能接收单一键值,而且我调试时输入3的时候,console.write()输出的是D3而不是3.
部分代码如下
...
if ((key = Console.ReadKey(true).Key) != ConsoleKey.Escape)
//判断用户是否按下esc键,不是则继续
{
try
{
lines = int.Parse(console.readline());
}
catch
{ Console.WriteLine("请输入正确的整数值!");
continue;
}
.........能用readkey获取输入的数值吗?但这个只能接收单一键值,而且我调试时输入3的时候,console.write()输出的是D3而不是3.
用while来判断每次输入的值,
List<string> list = new List<string>();
while (state)
{
ConsoleKeyInfo keyinfo = Console.ReadKey();
if (keyinfo.Key == ConsoleKey.Escape)
{
state = false;
}
else
{
if (keyinfo.Key == ConsoleKey.Enter)
{
}
else
{
list.Add(keyinfo.Key.ToString());
}
}
}
using System.Collections.Generic;
namespace gets
{
class class2
{
static void Main()
{
bool state = true;
string b=string.Empty;
List<string> list = new List<string>();
while (state)
{
ConsoleKeyInfo keyinfo = Console.ReadKey();
if (keyinfo.Key == ConsoleKey.Escape)
{
state = false;
break;
}
else
{
if (keyinfo.Key == ConsoleKey.Enter)
{
Console.WriteLine("");
break;
}
else
{
list.Add(keyinfo.Key.ToString());
}
}
}
foreach (string n in list)
{
b=b+n;
}
Console.WriteLine(b); }
}
}比如上面的程序,你输入23,得到的b值的输出是D2D3