c# .net char buffering

Lectura de dos personajes en C#



.net char (4)

No puedo leer un segundo personaje con el método Console.Read (). Quiero decir que no recibo ningún mensaje para leer el segundo personaje desde el teclado. ¿Alguna ayuda, por favor? Además, entiendo que el carácter es por defecto un int pero aún necesitamos convertirlo a char cuando leemos desde la entrada, ¿está bien? El código siguiente lee el primer carácter pero termina con el segundo.

public static void Main() { Console.WriteLine("The First Character?:"); char firstChar=Convert.ToChar(Console.Read()); Console.WriteLine("The Second Character?:"); char secondChar=Convert.ToChar(Console.Read()); }


Por favor, consulte Console.Read . Específicamente, esta parte:

El método Read bloquea su devolución mientras escribe caracteres de entrada; termina cuando presiona la tecla Enter. Al presionar Enter, se agrega una secuencia de terminación de línea dependiente de la plataforma a su entrada (por ejemplo, Windows agrega una secuencia de retorno de carro-salto de línea). Las llamadas posteriores al método Read recuperan su entrada un carácter a la vez. Después de que se recupera el carácter final, Read bloquea su retorno nuevamente y el ciclo se repite.


Parece que Console.ReadKey() es lo que realmente quieres.


Su segunda Console.Read() está consumiendo el retorno de carro que termina la primera lectura.

Console.ReadKey es un poco más amigable de usar, ya que no requiere un retorno de carro de terminación. Si desea continuar usando Console.Read , intente consumir y descartar el retorno de carro antes del segundo aviso, como por ejemplo:

public static void Main() { Console.WriteLine("The First Character?:"); char firstChar = Convert.ToChar(Console.Read()); Console.Read(); // consume carriage return Console.WriteLine("The Second Character?:"); char secondChar = Convert.ToChar(Console.Read()); Console.WriteLine(secondChar); }


Tal vez este código esté más cerca de lo que estás buscando ...

public static void Main() { Console.WriteLine("The First Character?:"); char firstChar = Convert.ToChar(Console.ReadKey().KeyChar); Console.WriteLine(); Console.WriteLine("The Second Character?:"); char secondChar = Convert.ToChar(Console.ReadKey().KeyChar); }