Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 14.03.2017
Сообщений: 53
1

Блокирование консольного ввода в C++

28.03.2019, 15:33. Просмотров 2092. Ответов 25
Метки нет (Все метки)

Всем привет! Хотел бы узнать: как в плюсах можно реализовать "блокирование" консольного ввода? То есть я хочу, чтобы пользователь не мог ввести больше 6 символов например. Ну а все последующие символа или стирались сразу же после ввода или вообще не вводились. Как это можно сделать? И есть ли функция, которая бы посимвольно считывала данные?(то есть считала один символ и тут же завершила работу, не дав ввести следующий символ)
Заранее спасибо!)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2019, 15:33
Ответы с готовыми решениями:

Обработка консольного ввода
создал консольное приложение . Хочу сделать так,чтобы при нажатии буквы С,программа закрывалась,а...

Использование файлового ввода-вывода вместо консольного
Как сделать так, чтобы входные файлы вводились из текстового документа, а выходные сохранялись в...

Как реализовать локализацию консольного ввода/вывода для заданного языка?
Здравствуйте, подскажите пожалуйста как добавить украинский язык в с++ в dev c++? То что я читала...

Как реализовать локализацию консольного ввода/вывода? (вывод в консоль на заданном языке)
Ребят, а можно ли сделать язык программы не русской, а например белоруской? Белорусский #include...

25
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 15:41 2
C++
1
2
char ch;
std::cin >> ch;
0
(80 / 20 || 50 / 50) = x
1655 / 1127 / 433
Регистрация: 16.08.2014
Сообщений: 4,730
Записей в блоге: 1
28.03.2019, 15:43 3
TheSava, наверно только через winapi, так как за первоначальный ввод в консоль отвечает операционка.

Добавлено через 48 секунд
C++
1
2
char ch;
std::cin >> ch;
dreamer_108, это просто с кансоли зацепит один символ, в буфер все равно остальное попадет
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 15:45 4
Цитата Сообщение от _stanislav Посмотреть сообщение
это просто с кансоли зацепит один символ, в буфер все равно остальное попадет
В буфер попадет, но на некотором уровне поставленная задача решается - функция посимвольно считывает данные
Если этого не хватит, ТС напишет, ну а полное блокирование одной функцией не сделается)
0
(80 / 20 || 50 / 50) = x
1655 / 1127 / 433
Регистрация: 16.08.2014
Сообщений: 4,730
Записей в блоге: 1
28.03.2019, 15:47 5
Цитата Сообщение от dreamer_108 Посмотреть сообщение
Если этого не хватит, ТС напишет
как я понял он хочет что бы ввод лишних символов вообще не отображался в консоли.
0
0 / 0 / 0
Регистрация: 14.03.2017
Сообщений: 53
28.03.2019, 15:49  [ТС] 6
_stanislav, А на Mac OS как быть?

Добавлено через 1 минуту
dreamer_108, Да, я не хочу, чтобы лишние символы в консоли отображались
0
2701 / 1649 / 346
Регистрация: 09.09.2017
Сообщений: 6,766
28.03.2019, 15:50 7
Как вариант - curses и ручками обрабатывать по одному символу. Конечно, с реализацией нормального редактирования строки придется повозиться.
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 15:52 8
Цитата Сообщение от _stanislav Посмотреть сообщение
что бы ввод лишних символов вообще не отображался в консоли
Цитата Сообщение от TheSava Посмотреть сообщение
Да, я не хочу, чтобы лишние символы в консоли отображались
Тогда сложнее, в винапи я это как-то делал, но как это сделать переносимым, не знаю
0
Mental handicap
1241 / 619 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
28.03.2019, 15:53 9
Цитата Сообщение от TheSava Посмотреть сообщение
То есть я хочу, чтобы пользователь не мог ввести больше 6 символов например.
C++
1
2
3
4
char c;
for (std::size_t i = 0; i < 6 && std::cin.get(c); ++i) {
    // ...
}
Не тестил правда, но в теории должно работать
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 15:56 10
Azazel-San, поток ввода это не заблокирует, ты можешь сразу ввести 10 символов
0
Mental handicap
1241 / 619 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
28.03.2019, 16:00 11
Цитата Сообщение от dreamer_108 Посмотреть сообщение
поток ввода это не заблокирует
И?
Цитата Сообщение от TheSava Посмотреть сообщение
Ну а все последующие символа или стирались сразу же после ввода или вообще не вводились.
Результат должен устроить ТСа.
Цитата Сообщение от dreamer_108 Посмотреть сообщение
ты можешь сразу ввести 10 символов
Нет же.
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 16:05 12
Цитата Сообщение от Azazel-San Посмотреть сообщение
Нет же
Ну вообще да, по крайней мере я на своей винде могу)
0
Mental handicap
1241 / 619 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
28.03.2019, 16:09 13
dreamer_108, странно. Проверил у себя, все ок.
C++
1
2
3
4
5
6
7
#include <iostream>
int main() {
    char c;
    for (std::size_t i = 0; i < 6 && std::cin.get(c); ++i) {
        std::cout << c;
    }
}
Пример ввода:
Код
abcdefgfh
Вывод:
Код
abcdef
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 16:10 14
Так то вывод, а ТС хочет, чтобы ты ввести больше 6 не смог
0
Mental handicap
1241 / 619 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
28.03.2019, 16:15 15
dreamer_108, ммм, ОК
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main() {
    char c;
    char c_buff[7]{}; // 7 только для вывода, так спокойно делаем char c_buff[6]
    for (std::size_t i = 0; i < 6 && std::cin.get(c); ++i) {
        c_buff[i] = c;
    }
    std::cout << c_buff;
}
Привередливый какой, ух.
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 16:19 16
Хорошая попытка, но ничего не меняется - буквы я в консоль ввести могу)

Добавлено через 1 минуту
Проблема в том, что выход из ф-ции cin в данном случае будет по нажатию enter) А до тех пор могу хоть войну и мир напечатать, главное без переносов строк)
0
Mental handicap
1241 / 619 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
28.03.2019, 16:24 17
Цитата Сообщение от dreamer_108 Посмотреть сообщение
буквы я в консоль ввести могу)
Ну, это самое простое решение, и прошу заметить работает на всех платформах :0
Да, может не совсем как ожидалось, но результат будет один.
ИМХО, не вижу смысла заниматся такими танцами с бубном что бы просто завершать программу, еще при попытке ввести данные, если можно спокойно потом захендлить, ладно еще для юникс платформ можно поиграться с ncurses (вроде так либа называется), для винды уж точно там будут танцы с бубнами, если ТСу надо решения для винды то тему надо переместить в соответствующий раздел по ВинАПИ, нативными силами С++ то что можно сделать я привел.
В сотальном я думаю ТС сам решит что ему делать.
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 16:28 18
Цитата Сообщение от Azazel-San Посмотреть сообщение
не вижу смысла заниматся такими танцами с бубном
Полностью согласен, в начале привел похожее решение и думаю, что его должно хватить)
Но ТС сказал, что не хватает, это ж я не из вредности спорю)
Цитата Сообщение от TheSava Посмотреть сообщение
Да, я не хочу, чтобы лишние символы в консоли отображались
Хотя можно уж и пережить лишние символы, на край ошибку ввода кидать, если пользователь не слушается)
0
Azazel-San
28.03.2019, 16:30
  #19

Не по теме:

Цитата Сообщение от dreamer_108 Посмотреть сообщение
это ж я не из вредности спорю)
Просто я думаю это не вы должны были спорить со мной а ТС)

0
dreamer_108
28.03.2019, 16:37     Блокирование консольного ввода в C++
  #20

Не по теме:

Цитата Сообщение от Azazel-San Посмотреть сообщение
Просто я думаю это не вы должны были спорить со мной а ТС
Это верно, но он отмалчивается, а вдруг поступило бы элегантное решение)

0
28.03.2019, 16:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2019, 16:37
Привет! Вот еще темы с ответами:

Написать функции для работы с массивом - выделения/освобождения памяти, консольного ввода/вывода
Напишите функции: 1) выделяющую память для массива данных типа float, 2) заполняющую ячейки...

Блокирование ввода данных в стобец
Здрасте, пожалуйста помогите сделать ограничение/триггер в БД на SQL. Есть две таблицы Группы...

Блокирование ввода textbox в зависимости от состояния CheckBox
Всем доброе время! Есть datagridview из которого считывается значение первого столбца выделенной...

Символ после консольного ввода
Как сделать так, чтобы во время ввода от пользователя в C# на строке ввода после string шел символ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.