c# - 字符串或列表的键输入/删除字符串的最后一个字符
c# - key input to string or list / deleting last character of string
基本上,我正在创建一个基本的密码脚本。
我目前遇到的问题是注册退格键以删除字符。我有检测退格键的基础,但它们实际上还没有做任何事情,因为我目前将输入用作字符串,而据我所知,字符串不能使用简单的修改来删除最后一个字符?
由此导致的第二个问题是,当执行退格键时,替换真实字符的控制台“*”字符不会从控制台中删除。有没有办法修改控制台显示以将其删除?
另一方面,如果有一种方法可以从字符串中删除单个字符,这将有助于了解此程序和将来的其他程序。
所以在这种情况下,将输入的字符插入到列表中是否对我来说是理想的,如果实施退格键以删除最后一个索引列表元素?
代码如下:
using System;
using System.Collections.Generic;
namespace MobileApplication
{
public class Password
{
public void run()
{
while (true)
{
String b = "\n---------\n";
String Pass = "TS";
String passin = "";
int count = 1;
int limit = 4;
Console.Write($"{b}- Login -{b}\n(Case senitive)");
Console.Write($"\nPassword > ");
while ( count <= limit) {
var key = System.Console.ReadKey(true);
//if (key.Key != ConsoleKey.Enter) { // the below can be substituted for this but then backspage shows up as *
if (key.Key == ConsoleKey.A || key.Key == ConsoleKey.B || key.Key == ConsoleKey.C || key.Key == ConsoleKey.D ||
key.Key == ConsoleKey.E || key.Key == ConsoleKey.F || key.Key == ConsoleKey.G || key.Key == ConsoleKey.H ||
key.Key == ConsoleKey.I || key.Key == ConsoleKey.J || key.Key == ConsoleKey.K || key.Key == ConsoleKey.L ||
key.Key == ConsoleKey.M || key.Key == ConsoleKey.N || key.Key == ConsoleKey.O || key.Key == ConsoleKey.P||
key.Key == ConsoleKey.Q || key.Key == ConsoleKey.R || key.Key == ConsoleKey.S || key.Key == ConsoleKey.T ||
key.Key == ConsoleKey.U || key.Key == ConsoleKey.V || key.Key == ConsoleKey.W || key.Key == ConsoleKey.X ||
key.Key == ConsoleKey.Y || key.Key == ConsoleKey.Z)
{
passin += key.KeyChar;
Console.Write("*");
}
// else if (key.Key == ConsoleKey.Backspace) // this is the problem
// {
// String temppass = passin;
// passin -= key.KeyChar;
// }
else if (key.Key == ConsoleKey.Enter)
{
Console.WriteLine($"\n{passin} ENTER");
//break;
if (passin == Pass)
{
Console.WriteLine("success haxer");
}
else
{
passin = "";
Console.Write($"incorrect password ({count} / {limit})\n\nPassword > ");
count++;
}
}
}
Console.Write($"U Failed 2 haxing");
Console.Write($"{b}\n- Goodbye -\n{b}");
}
}
}
}
您需要从屏幕上删除“*” - Console.Write("\b \b")
应该可以处理。
然后从字符串中删除字符,你可以只使用从字符串中删除的函数。
所以代码应该是这样的:
else if (key.Key == ConsoleKey.Backspace) // this is the problem
{
Console.Write("\b \b");
passin = passin.Remove(passin.Length - 1, 1);
}
基本上,我正在创建一个基本的密码脚本。
我目前遇到的问题是注册退格键以删除字符。我有检测退格键的基础,但它们实际上还没有做任何事情,因为我目前将输入用作字符串,而据我所知,字符串不能使用简单的修改来删除最后一个字符?
由此导致的第二个问题是,当执行退格键时,替换真实字符的控制台“*”字符不会从控制台中删除。有没有办法修改控制台显示以将其删除?
另一方面,如果有一种方法可以从字符串中删除单个字符,这将有助于了解此程序和将来的其他程序。
所以在这种情况下,将输入的字符插入到列表中是否对我来说是理想的,如果实施退格键以删除最后一个索引列表元素?
代码如下:
using System;
using System.Collections.Generic;
namespace MobileApplication
{
public class Password
{
public void run()
{
while (true)
{
String b = "\n---------\n";
String Pass = "TS";
String passin = "";
int count = 1;
int limit = 4;
Console.Write($"{b}- Login -{b}\n(Case senitive)");
Console.Write($"\nPassword > ");
while ( count <= limit) {
var key = System.Console.ReadKey(true);
//if (key.Key != ConsoleKey.Enter) { // the below can be substituted for this but then backspage shows up as *
if (key.Key == ConsoleKey.A || key.Key == ConsoleKey.B || key.Key == ConsoleKey.C || key.Key == ConsoleKey.D ||
key.Key == ConsoleKey.E || key.Key == ConsoleKey.F || key.Key == ConsoleKey.G || key.Key == ConsoleKey.H ||
key.Key == ConsoleKey.I || key.Key == ConsoleKey.J || key.Key == ConsoleKey.K || key.Key == ConsoleKey.L ||
key.Key == ConsoleKey.M || key.Key == ConsoleKey.N || key.Key == ConsoleKey.O || key.Key == ConsoleKey.P||
key.Key == ConsoleKey.Q || key.Key == ConsoleKey.R || key.Key == ConsoleKey.S || key.Key == ConsoleKey.T ||
key.Key == ConsoleKey.U || key.Key == ConsoleKey.V || key.Key == ConsoleKey.W || key.Key == ConsoleKey.X ||
key.Key == ConsoleKey.Y || key.Key == ConsoleKey.Z)
{
passin += key.KeyChar;
Console.Write("*");
}
// else if (key.Key == ConsoleKey.Backspace) // this is the problem
// {
// String temppass = passin;
// passin -= key.KeyChar;
// }
else if (key.Key == ConsoleKey.Enter)
{
Console.WriteLine($"\n{passin} ENTER");
//break;
if (passin == Pass)
{
Console.WriteLine("success haxer");
}
else
{
passin = "";
Console.Write($"incorrect password ({count} / {limit})\n\nPassword > ");
count++;
}
}
}
Console.Write($"U Failed 2 haxing");
Console.Write($"{b}\n- Goodbye -\n{b}");
}
}
}
}
您需要从屏幕上删除“*” - Console.Write("\b \b")
应该可以处理。
然后从字符串中删除字符,你可以只使用从字符串中删除的函数。
所以代码应该是这样的:
else if (key.Key == ConsoleKey.Backspace) // this is the problem
{
Console.Write("\b \b");
passin = passin.Remove(passin.Length - 1, 1);
}