Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
#1

Стирание знака - C++

23.06.2013, 12:04. Просмотров 529. Ответов 9
Метки нет (Все метки)

Здравствуйте! Хочу сделать так, чтоб можно было стирать(визуально) один символ при вводе строки с помощью getche(). Кто знает как это можно сделать?
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
void get_str(char* str)
{
    int count = 0;
    do
    {
        if(count == SZ)
        {
            cout << endl << "Строка может содержать только " << SZ - 1 << " символов." << endl
                << "Попрубуйте ещё раз." << endl;
            count = 0;
        }
        *(str + count) = getche();
        if(*(str + count) == 8)
        {
            *(str + count - 1) = '\0';
            cout << endl << str;
            count -= 2;
        }
        count++;
    }while(*(str + (count - 1)) != '\r');
    
    str[count - 1] = '\x0';
    cout << endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2013, 12:04     Стирание знака
Посмотрите здесь:

Стирание надписи с экрана - C++
А можно в С++ стирать с экрана инфу тоесть например : на экране надпись &quot;Привет&quot; и на этом же месте стирается &quot;Привет&quot; и пишется например...

Стирание старых отрисовок. - C++
Здравствуйте, помогите пожалуйста. Моя программа рисует шары, радиус которых можно менять во время выполнения программы, но когда я меняю...

Как добавить стирание символов в программе - C++
Как добавить стирание символов в программе(после запуска ctrl+F5) в visual c++ ? То есть,чтобы я мог писать и стирать символы при запуске...

Кодировка знака ± - C++
В общем, надо вывести в консоль такой знак ±. Какую кодировку для этого нужно использовать?

Ввод знака пробела - C++
Привет всем! Как можно реализовать ввод строки с пробелами? Нужно для задания адреса файла где могут попадаться названия папок с...

Считывание строки до знака '\n' - C++
Я пользуюсь функцией gets() и getline(). В обеих случаях читает только к первому пробелу. А вторая функция если даже задать что считывать к...

Ввод знака + или - - C++
Здравствуйте есть код #include &lt;iostream&gt; using namespace std; int main() { int a1=0;

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 759
Записей в блоге: 1
26.06.2013, 02:31     Стирание знака #2
*(str + count) - так писать нехорошо. Чем str[count] не нравится ?

Ответ собственно на вопрос: печатай символ backspace.
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
26.06.2013, 21:44  [ТС]     Стирание знака #3
А можно пожалуйста код привести, а то у меня не получается... Backspace работает, но вот символы не удаляются, просто курсор переходит на символ назад. Я хочу, чтоб backspace работал как с cin...
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 759
Записей в блоге: 1
26.06.2013, 22:03     Стирание знака #4
Когда-то работало, странно.
Тогда на backspace печатай "бекспейс", "пробел", "бекспейс"

Добавлено через 24 секунды
Есть, вероятно, что-то более удобное, но я не в курсе.
Thinker
Эксперт C++
4223 / 2197 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.06.2013, 22:07     Стирание знака #5
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
*(str + count) - так писать нехорошо.

Не по теме:

почему?

Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 759
Записей в блоге: 1
26.06.2013, 22:16     Стирание знака #6
Единые стандарты улучшают понимание. Когда ты пишешь код, неплохо бы стремиться, что его можно было понять как можно быстрей.
С этой точки зрения, когда я вижу str[count], я сразу понимаю, о чём идёт речь.
А выражение вида *(str+count) - это хммм, зачем он к строке что-то прибавляет. Ага, инкрементирует указатель и разыменовывает.

Зачем ? Показать, что ты понимаешь, как работает С++ ?

Кроме того, теперь код не так просто обновить до использования std::string, к примеру, где код с разыменованием уже не пройдёт.

В общем, если коротко - принцип бритвы Оккама.
Thinker
Эксперт C++
4223 / 2197 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.06.2013, 22:22     Стирание знака #7
с другой стороны, многие программы потеряли бы свою зрелищность и компактность, если использовать индексирование, особенно работа с n-мерными массивами.
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 759
Записей в блоге: 1
26.06.2013, 22:27     Стирание знака #8
Ну, это скорее программирование ради программирования. Есть, к примеру, язык brainfuck и в нём есть своя прелесть.
Зрелищность очень часто входит в конфликт с прагматичностью, согласен.

Про многомерные массивы трудно что-то сказать, у меня с массивами больше 2мерных опыта использования почти нет.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2013, 23:33     Стирание знака #9
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
28
29
30
31
32
33
void get_str(char* str)
{
    int count = 0;
    char ch;
    do
    {
        if(count == SZ)
        {
            cout << endl << "Строка может содержать только " << SZ - 1 << " символов." << endl
                << "Попрубуйте ещё раз." << endl;
            count = 0;
        }
        ch = getche();
        if(ch == 8)
        {   
            if (count != 0)
            {
                putch(' ');
                putch(8);
                count -= 1;
            }
        }
        else
        {
            str[count] = ch;
            count++;
        }
        
    } while (str[count - 1] != '\r');
    
    str[count - 1] = '\x0';
    cout << endl;
}
Добавлено через 46 минут
Исключение ввода пустой строки:
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
28
29
30
31
32
33
34
void get_str(char* str)
{
    int count = 0;
    char ch;
    do
    {
        if(count == SZ)
        {
            cout << endl << "Строка может содержать только " << SZ - 1 << " символов." << endl
                << "Попрубуйте ещё раз." << endl;
            count = 0;
        }
        ch = getche();
        if(ch == 8)
        {   
            if (count != 0)
            {
                putch(' ');
                putch(8);
                count -= 1;
            }
        }
        else if (ch != '\r')
        {
            str[count] = ch;
            count++;
        }
        
    } while (ch != '\r' || count == 0);
    
    ++count;
    str[count - 1] = '\x0';
    cout << endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2013, 23:40     Стирание знака
Еще ссылки по теме:

Проверка знака числа - C++
Есть программа, она считает все делители числа и их сумму, но и считает также отрицательные числа. Помогите пожалуйста что бы она считала...

Какое обозначения знака суммы в С++? - C++
Как в С++ описать знак суммы (латинская буква сигма )?

2 знака после запятой и не только - C++
Здравствуйте форумчане 1)есть вопросик по поводу приведения результата выполнения кода в божеский вид... нужен результат типа x=2.50 F=...

Передача в функцию знака операции (+,-,*,/) - C++
Хотелось бы написать функцию по работе очень похожа на калькулятор, для удобства расчетов. Но ни как не могу понять как передать операцию +...

Цикл while VS C++. Определение знака зодиака - C++
{deleted} Код нужно переписывать в сообщение! Помогите решить проблему. Нужно сделать выполнения цикла пока а меньше 1 или больше 31. ...


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

Или воспользуйтесь поиском по форуму:
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
26.06.2013, 23:40  [ТС]     Стирание знака #10
Всем спасибо! Вывожу дополнительно " " и backspace и всё работает.
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
void get_str(char* str)
{
    int count = 0;
    char ch = 8;
    do
    {
        if(count == SZ)
        {
            cout << endl << "Строка может содержать только " << SZ - 1 << " символов." << endl
                << "Попрубуйте ещё раз." << endl;
            count = 0;
        }
        *(str + count++) = getche();
        if(*(str + count - 1) == 8)
        {
            if(count != 1)
            {
                cout << " " << ch;;
                count -= 2;
            }
            else
                count--;
        }
    }while(*(str + (count - 1)) != '\r');
    str[count - 1] = '\x0';
    cout << endl;
}
Yandex
Объявления
26.06.2013, 23:40     Стирание знака
Ответ Создать тему
Опции темы

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