Консоль зависает на новой строке после получения пользовательского ввода - PullRequest
1 голос
/ 15 февраля 2020

Мне нужна эта программа, чтобы попросить пользователя ввести число для добавления в массив. После ввода номера консоль переходит на новую строку, пока вы не нажмете другую клавишу, после чего она снова будет делать то же самое. Я новичок в C# и предполагаю, что это как-то связано с тем, что он читает клавишу ввода после того, как пользователь вводит информацию, поэтому мне нужно использовать что-то эквивалентное cin.ignore (), но я не Не удалось найти ничего, что решило бы проблему.

public void InputSet()
{
    int userInput;

    do
    {
        C.Write("Enter an element (Enter to end): ");
        userInput = Convert.ToInt32(C.ReadLine()); // Read user input

        if (userInput < 1 || userInput > 50) // Check if in bounds
            C.WriteLine("Input is invalid. Enter from 1 to 50."); // Error message if out of bounds
        else
        {
            Array.Resize(ref arr, arr.Length + 1); // Expand array and then add it in
            arr[arr.Length - 1] = userInput;
        }
    } while(Console.ReadKey (true).Key != ConsoleKey.Enter); // If enter key is pressed, exit loop

Вот видео проблемы: Зависание на новой строке

Ответы [ 2 ]

2 голосов
/ 15 февраля 2020

Я не совсем уверен, что понимаю ваш вопрос или проблему

Однако,

  1. Вы, вероятно, должны использовать List вместо массива
  2. Вы должны использовать int.TryParse для проверки ввода пользователя
  3. Возможно, вы должны использовать Console.ReadLine вместо ReadKey
  4. Вы можете проверить result == string.Empty для выход

Пример

var list = new List<int>();

while (true)
{
   Console.Write("Enter an element (Enter to end): ");
   var result = Console.ReadLine();

   if (result == string.Empty) break;
   if (!int.TryParse(result, out var value))
   {
      Console.WriteLine("You had one job...");
      continue;
   }
   list.Add(value);
} 

Console.WriteLine(string.Join(", " , list));

Console.ReadKey();

Выход

Enter an element (Enter to end): 2
Enter an element (Enter to end): 3
Enter an element (Enter to end): 4
Enter an element (Enter to end): 6
Enter an element (Enter to end): f
You had one job...
Enter an element (Enter to end):
2, 3, 4, 6
1 голос
/ 15 февраля 2020

Консоль не висит - она ​​ожидает ввода для продолжения, пока l oop:

while(Console.ReadKey (true).Key != ConsoleKey.Enter);

Я проверил код, и он работает нормально - Возможно, вы захотите оставить отзыв пользователь, в каком действии нужно выполнить, чтобы завершить sh или продолжить.

        Console.WriteLine("Press enter to terminate or C to continue");
    } while (Console.ReadKey(true).Key != ConsoleKey.Enter); // If enter key is pressed, exit loop

Любая клавиша действительно подойдет.

...