Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
-3 / 2 / 4
Регистрация: 24.09.2015
Сообщений: 98
1

Низкоуровневый консольный ввод и вывод

08.11.2016, 21:39. Просмотров 1145. Ответов 5
Метки нет (Все метки)

Добрый вечер всем форумчанам (может, у кого еще день )
Помогите, пожалуйста. Вот написал такой код:
C++
1
2
3
4
5
6
7
8
for (int i = 0;; i++)
    {
        char r = _getch();
        if ((int)r == 13)
            break;
        cout <<"*";
    }
    cout << endl;
Он производит ввод символа с клавиатуры, а на экран выводит звездочку. Процесс продолжается до нажатия Etner
Вопрос вот в чем: можно ли как-нибудь его модифицировать, чтобы по нажатию бекспейса одна звездочка вытиралась с экрана?
Просто нужно для ввода пароля в программке, этот код будет работать, но вытереть то, что ввел уже нельзя.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2016, 21:39
Ответы с готовыми решениями:

Низкоуровневый ввод/вывод
Требуется создать программу сохранения структуры в файл и чтение из него с помощью низкоуровневого...

Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод
Добрый день! Помогите, пожалуйста, с программой. Программа считывает строку с клавиатуры и...

Низкоуровневый ввод-вывод. Как с помощью функции write записать в файл тип int?
Работаю в Ubuntu.По заданию требуется использовать функции низкоуровневого ввода-вывода.Как с...

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

5
1353 / 991 / 314
Регистрация: 28.07.2012
Сообщений: 2,748
09.11.2016, 00:17 2
TheTangro, отлавливаешь через getch нажатие BS и выводишь
C++
1
cout << '\b';
Тогда один символ из текущей строки будет удален.

Добавлено через 2 минуты
Собственно
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0;; i++)
    {
        char r = _getch();
        if ((int)r == 13)
            break;
        if (r == '\b')
            cout << "\b \b";
        else
            cout <<"*";
    }
    cout << endl;
1
-3 / 2 / 4
Регистрация: 24.09.2015
Сообщений: 98
09.11.2016, 00:30  [ТС] 3
Это ничего не дает. Нужно чтобы из строки одна звездочка убиралась.
0
1353 / 991 / 314
Регистрация: 28.07.2012
Сообщений: 2,748
09.11.2016, 00:33 4
Лучший ответ Сообщение было отмечено TheTangro как решение

Решение

TheTangro,
Цитата Сообщение от nonedark2008 Посмотреть сообщение
cout << "\b \b";
Добавлено через 57 секунд
Первая \b сдвигает курсор на позицию назад, далее выводится пробел, затирая при этом один символ, а затем следующий \b сдвигает курсор обратно назад.
1
-3 / 2 / 4
Регистрация: 24.09.2015
Сообщений: 98
09.11.2016, 00:54  [ТС] 5
Спасибо))) Очень помогли. Кстати, пока сидел, вот что мой воспаленный, жаждущий спать мозг наваял)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
COORD position;                                     
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);  
    position.X = 0;                                 
    position.Y = 0;                                 
    SetConsoleCursorPosition(hConsole, position);
    for (int i = 0;; i++)
    {
        SetConsoleCursorPosition(hConsole, position);
        char r = _getch();
        if ((int)r == 13)
            break;
        if ((int)r == 8)
        {
            position.X--;
            SetConsoleCursorPosition(hConsole, position);
            cout << ' ';
        }
            
        else
        {
            cout << "*";
            position.X++;
        }
        
    }
    system("cls");
    cout<< endl;
Вот так тоже затирается нормально, но здесь есть такая проблема как то, что никогда не знаешь, какие именно начальные координаты будут у строки. Поэтому ваш способ гораздо предпочтительнее, спасибо.
P.S. Может кто знает, как можно узнавать координаты начального положения каретки, чтобы подправить мой вариант?
0
1353 / 991 / 314
Регистрация: 28.07.2012
Сообщений: 2,748
09.11.2016, 08:56 6
TheTangro, GetConsoleScreenBufferInfo.
Эта функция заполняет структуру, в которой также есть информации и о текущей позиции курсора.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2016, 08:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Консольный ввод-вывод
При попытке сделать этО!получилось вот это) Может кто нибудь подскажет?ну или конкретно,что...

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

Консольный ввод/вывод - Перестали работать SetLocale
После того, как переопределил ввод и вывод обратно в консоль freopen(&quot;CON&quot;, &quot;w&quot;, stdout);...

Консольный ввод/вывод вещественного массива размерои 5*5
Добрый вечер. Возможно обращаюсь не по адресу, но все же попытка не пытка. Раньше программировал...


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

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

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