Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
1

Почему управляющие символы не работают?

24.10.2018, 10:20. Показов 1236. Ответов 15
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
12
using System;
 
class MainClass
{
    public static void Main(string[] args)
    {
        ConsoleKey x = Console.ReadKey().Key;
        ConsoleKey y = Console.ReadKey().Key;
        Console.WriteLine($"1{x}2{y}3");
        Console.ReadKey();
    }
}
Например, я нажал Enter два раза, я ожидаю увидеть такой вывод:
1
2
3
Как исправить код?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2018, 10:20
Ответы с готовыми решениями:

Управляющие символы \n \r
Можете привести пример когда разница действия \n и \r будет видна? using System; public class...

Управляющие символы отобразить на форме
Есть массив байтов в кодировке ASCII. Когда я пытаюсь вывести в текстбокс не вижу управляющих...

Управляющие символы \r и \n
Всем привет, помогите разобраться, в чем различие между \r\n и просто \n (windows)? По идее \n...

Управляющие символы Unicode
Как в строку делфи вставить например символ 200C? я пробовал ну не пашет. у меня делфи xe7

15
196 / 41 / 24
Регистрация: 24.02.2013
Сообщений: 231
24.10.2018, 12:16 2
C#
1
2
3
4
5
6
7
static void Main(string[] args)
        {
            Console.ReadKey();
            Console.ReadKey();
            Console.WriteLine("1\n2\n3");
            Console.ReadKey();
        }
0
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
24.10.2018, 14:22  [ТС] 3
alexSo94, а если надо именно вводить управляющие символы?
0
Модератор
Эксперт .NET
10857 / 7703 / 2088
Регистрация: 21.04.2018
Сообщений: 23,190
Записей в блоге: 2
24.10.2018, 14:36 4
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
alexSo94, а если надо именно вводить управляющие символы?
Насколько помню метод ReadKey() возвращает код клавиши, а не символ, соответствующий, этой клавише. Надо сделать преобразование из кодов в символы.

Добавлено через 7 минут
Попробуйте использовать
C#
1
var x = Console.ReadKey().KeyChar
0
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
24.10.2018, 14:36  [ТС] 5
C#
1
2
3
4
5
6
7
8
9
10
11
12
using System;
 
class MainClass
{
    public static void Main(string[] args)
    {
        char x = Console.ReadKey().KeyChar;
        char y = Console.ReadKey().KeyChar;
        Console.WriteLine($"1{x}2{y}3");
        Console.ReadKey();
    }
}
Почему при вводе двух Enter выводится только 3?
0
Модератор
Эксперт .NET
10857 / 7703 / 2088
Регистрация: 21.04.2018
Сообщений: 23,190
Записей в блоге: 2
24.10.2018, 14:39 6
И то я не знаю правильно сработает или нет. Так полностью переход строки это два символа \r\n

Добавлено через 1 минуту
Enter, наверное, соответствует, символу \r, и при выводе у Вас все символы накладываются друг на друга и остаётся видным только последний.
0
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
24.10.2018, 14:40  [ТС] 7
Хорошо. Кто-нибудь объясните мне как тут работает программа. Переход строки 2 символа, но x и y - одиночные символы, точнее вопрос такой: куда 2/4 символов попадает (если ввели Enter)? И если они где то остаются, то как их взять из того места, где они остались? И если они где то действительно остаются, то по какому принципу компилятор определяет что вернуть в переменные, что оставить на будущее, как говорится?
0
Модератор
Эксперт .NET
10857 / 7703 / 2088
Регистрация: 21.04.2018
Сообщений: 23,190
Записей в блоге: 2
24.10.2018, 14:43 8
В условии делайте дополнение, если получен символ \r, то добавить к нему \n

Добавлено через 2 минуты
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Хорошо. Кто-нибудь объясните мне как тут работает программа. Переход строки 2 символа, но x и y - одиночные символы, точнее вопрос такой: куда 2/4 символов попадает (если ввели Enter)?
Вышла 1
Потом выводится x - в данном случае это \r.
Курсор без перехода на следующую строку, возвращается в начало строки.
Выводится 2 и она "затирает" ранее выведенную 1.
И т.д. ....
0
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
24.10.2018, 14:50  [ТС] 9
Получается, что два \n остаются в буфере каком то лежать?
0
Модератор
Эксперт .NET
10857 / 7703 / 2088
Регистрация: 21.04.2018
Сообщений: 23,190
Записей в блоге: 2
24.10.2018, 14:52 10
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Получается, что \n остается в буфере каком то лежать?
Нет. Enter - это один символ \r.
0
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
24.10.2018, 14:53  [ТС] 11
Элд Хасп, а если я нажму клавишу, которая будет равняться двум символам управляющим, то что будет?
0
Модератор
Эксперт .NET
10857 / 7703 / 2088
Регистрация: 21.04.2018
Сообщений: 23,190
Записей в блоге: 2
24.10.2018, 15:02 12
Консоль это первое устройство ввода-вывода. Тогда ещё не было мониторов, принтеров. Было что-то типа печатной машинки подключенной к ЭВМ. И Enter означает - возврат корретки. Так как на печатной машинке можно печатать поверх ранее выведенной строки. Допустим, таким образом делалось подчёркивание, полужирный шрифт. Для перехода на новую строку была отдельная клавиша.
С появлением мониторов консоль стали выводить на них, но так как принципы вывода у них отличаются, то есть мелкие отличия. В том числе и с обработкой клавиши Enter и символов \r и \n

Добавлено через 3 минуты
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Элд Хасп, а если я нажму клавишу, которая будет равняться двум символам управляющим, то что будет?
Я давно уже с консолью не эксперементировал так дотошно. Тем более, что это не стандарт, а один из способ адаптации консоль к монитору.
Теоретически должно быть два последовательных ReadKey - по одному для каждого символа. Но так как в Net ReadKey считывает не сами символы напрямую, а состояние клавиатуры ConsoleKey, то надо посмотреть в свойствах - может там сразу есть вся информация.
1
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
24.10.2018, 15:39  [ТС] 13
Вопрос оставляю открытым. Пока что.
0
Модератор
Эксперт .NET
10857 / 7703 / 2088
Регистрация: 21.04.2018
Сообщений: 23,190
Записей в блоге: 2
24.10.2018, 15:43 14
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Вопрос оставляю открытым. Пока что.
А что самому проверить эксперементально слабо?
0
Alvin Seville
334 / 266 / 132
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
24.10.2018, 15:52  [ТС] 15
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А что самому проверить эксперементально слабо?
Нет. Просто если это сделают раньше меня, то лучше пусть отпишутся здесь. Тем более, я сейчас не за компьютером.
0
Модератор
Эксперт .NET
10857 / 7703 / 2088
Регистрация: 21.04.2018
Сообщений: 23,190
Записей в блоге: 2
24.10.2018, 16:09 16
ConsoleKeyInfo.Key - возвращает название клавиши.
ConsoleKeyInfo.KeyChar - символ UniCode. Если символа нет (допустим для управляющих клавиш, стрелок и т.д.) - возвращает \0.
Пример клавиша F12:
ConsoleKeyInfo.Key == ConsoleKey.F12;
ConsoleKeyInfo.KeyChar == '\0';

Добавлено через 8 минут
Клавиша "ф" - маленькая
ConsoleKeyInfo.Key == ConsoleKey.A;
ConsoleKeyInfo.KeyChar == 'ф';
ConsoleKeyInfo.Modifiers == 0;

Клавиша "Ф" - большая
ConsoleKeyInfo.Key == ConsoleKey.A;
ConsoleKeyInfo.KeyChar == 'Ф';
ConsoleKeyInfo.Modifiers == Shift;

Клавиша "A" - латинская
ConsoleKeyInfo.Key == ConsoleKey.A;
ConsoleKeyInfo.KeyChar == 'A';
ConsoleKeyInfo.Modifiers == ConsoleModifiers.Shift;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2018, 16:09

Json, управляющие символы
Всем привет! Уже не один час вожусь с этой проблемой, но решить не смог, все уже попробовал,...

Port[$60] Не работают управляющие клавиши Ctrl, Alt и т.д
Всем доброго времени суток! проблема следующая: есть обработчик прерываний клавиатуры, в котором к...

Как удалить управляющие символы?
Добрый день! При получении списка файлов с unix системы у меня, проходят управляющие символы...

Управляющие символы ввода/вывода
Здравствуйте,не могу понять,как переводить каретку на символ влево при выводе. читал на википедии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru