Консоль C#.Строка чтения создает новую строку при каждом нажатии клавиши

#c# #.net #computer-science #jetbrains-ide #rider

Вопрос:

Я столкнулся с этой странной проблемой, которая может быть связана с моей IDE или переопределением C#. Всякий раз , когда я вводлю что-то в консоль, что считывается моим Console.ReadLine() , оно дублируется и отображается ниже, пока я не нажму return. Например, я хочу ввести целую строку, но то, что я вижу, — это чтение символа за символом, что мешает отладке и присутствию моей программы. Я прилагаю приведенный ниже код вместе со скриншотом проблемы.

 using System;
using System.Text.RegularExpressions;

namespace Zadanie_1
{
    
    class Program
    {
        static void ShowMenu()
        {
            Console.WriteLine("Witaj w grze Siszarp!");
            Console.WriteLine("[1] Zacznij nową grę");
            Console.WriteLine("[X] Zamknij program"); 
        }
        static void PickOption(ConsoleKeyInfo keyPressed)
        {
            switch (keyPressed.KeyChar)
            {
                case '1':
                    Console.Clear();
                    Option1Picked();
                    break;
                case 'X':
                    Environment.Exit(0);
                    break;
            }
        }
        
        static bool IsCharacterNameValid(String characterName)
        {
            if (characterName.Length < 2)
            {
                Console.WriteLine("Niepoprawna nazwa!");
                return false;
            }
                
            if (!Regex.IsMatch(characterName, @"^[a-zA-Z] $"))
            {
                Console.WriteLine("Niepoprawna nazwa!");
                return false;
            }
                
            return true;
        }

        static void EnterCharacterName()
        {
            String characterName;
            do
            {
                Console.Write("Podaj nazwę bohatera:");
                characterName = Console.ReadLine();
            
            } while (!IsCharacterNameValid(characterName));

        }

        static void Option1Picked()
        {
            EnterCharacterName();
        }
        
        static void Main(string[] args)
        {
            ShowMenu();
            ConsoleKeyInfo keyPressed = Console.ReadKey();
            PickOption(keyPressed);

        }
    }
}
 

как вы можете видеть, входные данные считываются символ за символом, а не целой строкой

Комментарии:

1. Я не думаю, что это проблема с вашей реализацией. Как вы запускаете программу? Вы пробовали запустить его в другом терминале/оболочке?

2. @M. Деннхардт да, это работает, когда я запускаю его на внешней консоли, но это своего рода отстой, так как я бы предпочел протестировать свою программу во встроенной консоли Райдера.

3. Поскольку он работает, как и ожидалось, во внешней консоли, это, по-видимому, проблема с Rider. Есть несколько открытых ошибок , связанных с запуском консоли на трекере, например, 39941 . Однако я не смог найти ничего похожего на вашу проблему с помощью быстрого поиска. Вы могли бы попробовать повысить/понизить рейтинг Райдера и посмотреть, исправит ли это проблему. Вы также можете попробовать установить или снять флажок «Использовать внешнюю консоль» в окне «Конфигурации запуска/отладки».