1 / 1 / 1
Регистрация: 15.03.2016
Сообщений: 47
|
|
1 | |
Как сказать scanf-у не переводить строку после нажатия Enter?10.04.2016, 20:03. Показов 5749. Ответов 7
Метки нет Все метки)
(
Мне надо, чтобы после ввода, курсор в консоли оставался на прежнем месте. Частично, этого я смог добиться при помощи функции SetConsoleCursorPosition, установив курсор после ввода в нужное место. Но если нажать энтер, не введя ничего, или пока scanf не считает требуемое количество чисел, нажатие энтера приведет к возврату каретки с переводом на новую строку и не было бы проблемы, если бы с энтером сканф завершал свою работу, я бы проверил сколько чисел он считал и после этого установил бы курсор в нужное место, но сканф все так же ждет ввода чисел.
Пытался использовать "%[^\n]" но ничего путного из этого не вышло. Можете вообще объяснить доступно принцип работы потока ввода? Я понимаю это так: все что вводится с клавиатуры сразу попадает в поток, затем обрабатывается, если это не управляющий символ то просто выводится, скажем, нажав в консоли клавишу "а", я закину символ "а" в поток ввода, тот чем-то обработается и выведется на экран, если после этого я допишу что-нибудь еще, произойдет тоже самое, а вот если я нажму клавишу "backspace" символ "\b" попадет в поток, обработается, после чего произойдет отбрасывание предыдущего символа из потока и символа "\b", после отображение в консоли перевода каретки на одну позицию влево, нажатие энтера приведет к записи символа "\n" в поток, и отображение его в консоли в виде перевода каретки на новую строку. Поправьте где ошибаюсь, и дополните пожалуйста, если что-то упустил, просто в интернете не нашел ничего настолько разжеванного, возможно не правильно искал.
0
|
|
10.04.2016, 20:03 | |
Ответы с готовыми решениями:
7
Как считать строку scanf'ом при этом не переходя на новую строку, т.е. без использования Enter'а textbox.Multiline = true; не переводить строку по Enter
Как поставить каретку в начало после нажатия Enter в richtextbox? |
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
|
|
10.04.2016, 20:35 | 2 |
HepoH, вот здесь посмотри:Цикл выполняется через раз игнорируя считывание с клавиатуры
0
|
1 / 1 / 1
Регистрация: 15.03.2016
Сообщений: 47
|
|
10.04.2016, 20:54 [ТС] | 3 |
LFC, там-то мне понятно что произошло. С консоли в поток было отправлено 2 символа, какая-то буква и энтер. Сначала сканф считал в переменную введенную букву и прошелся по свитчу в соответствии с ней, если это была не "е", после которой происходит выход из вайла, то он заходит на второй круг, и пишет в переменную оставшийся символ энтера, которого нету в свитче, поэтому выполняется дефолт. К сожалению, применимого к моей ситуации я ничего не нашел(
0
|
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
|
|
10.04.2016, 21:00 | 4 |
HepoH, ты до конца прочитал?там старшие товарищи довольно подробно объясняют как бороться со scanf чтобы убрать лишние \n \r из буфера. Проблема та же что и у тебя просто в другом коде
Добавлено через 1 минуту там еще 2-я страница есть если че
0
|
1 / 1 / 1
Регистрация: 15.03.2016
Сообщений: 47
|
|
10.04.2016, 21:19 [ТС] | 5 |
LFC, я прочитал тему до конца, включая еще одну, которая была дана в конце. На второй странице тема ушла вообще в другую сторону на мой взгляд. Правильно ли я понял, что если убрать символ "\n" из буфера, то курсор вернется обратно? Если так, то все становится разительно проще
Добавлено через 16 минут LFC, перечитал еще раз, про то что после работы scanf, в потоке остается то, что он не забрал мне уже было известно, проблема то не в том, что в потоке есть символ "\n", scanf на него не смотрит, проблема в том что строка переводится,а scanf по-прежнему ждет, пока в поток не попадет либо то, что он ожидает, либо то чего он не ожидает (например буква, когда scanf принимает числа, тогда он просто сломается - в потоке будут висеть буквы, а сканф будет об них каждый раз спотыкаться)
0
|
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
|
|
11.04.2016, 08:46 | 6 |
HepoH, рассуждая на пальцах,не видя кода,мы конечно далеко уйдем.
0
|
1 / 1 / 1
Регистрация: 15.03.2016
Сообщений: 47
|
||||||
11.04.2016, 08:53 [ТС] | 7 | |||||
К примеру вот:
Меня интересует случай, когда нажимается энтер без ввода любых символов
0
|
12 / 12 / 10
Регистрация: 08.04.2016
Сообщений: 206
|
|
11.04.2016, 19:13 | 8 |
Если проблема лишь в этой программе, то попробуйте запретить нажатие первой клавишей клавиши ввода. её код в раскладке клавиатуры 0х000D; конечно прога не в одну строчку но возможность есть. при помощи цикла while. Если ищите уже готовую функцию то не знаю) мне вот интересно можно ли вместо перевода строки сделать enter как горизонтальную табуляцию) я только начинаю учиться и этот вопрос меня интересует с самого начала ) спс).
0
|
11.04.2016, 19:13 | |
Помогаю со студенческими работами здесь
8
После нажатия enter пролетели в ряд строки кода с текстом. Как сделать? Как можно заставить программу выполнять определенные действия после нажатия клавиши ENTER
После загрузки биоса Windows грузится только после нажатия enter + f4 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |