Другие языки программирования и технологии

Язык С. Как стереть определенную область или как спомощью getchar() ввести число?

Хочу найти способ после ввода числа с помощью scanf_s стереть это число, тоесть
scanf_s("%d", &a);
printf("\n%d", a);
Если я введу любое число, то у меня будет такое
а
а
Мне нужно, что бы после scanf_s число стиралось, но не использовать system("cls") так как, до этого числа будет введены слова, которые стирать не нужно.
Я пробовал функцию delline(), но она не работает или же это я не понял её
Я также искал, как использовать функцию getch() для ввода чисел, а не символов, так как после ввода символа, она не отображает его в окне консоли, как раз то что мне нужно, но тип не тот.
Не рекомендую так делать, но если очень хочется…

То, что на экран при вводе с клавиатуры (или другого источника) что-то выводится - это так называемое "эхо" на терминал. Есть терминалы и без эха, в которых та же программа будет ВЫГЛЯДЕТЬ по-другому.

Само наличие вывода - это хорошо, так как этим процессом можно управлять.
Например, выводя на экран символы '\b'. Это ОБЫЧНО передвигает позицию курсора налево, не удаляя символ. Если после этого вывести пробел, последний символ будет ВИЗУАЛЬНО заменен. Но в потоке вывода останутся все символы, что не есть хорошо для программы, так как её вывод нельзя будет использовать. Опять же есть терминалы, на которых '\b' затирает символ.

Технология сложная, приходится ВРУЧНУЮ распознавать данные, читая их посимвольно через getch или конвертируя строки. Например затирать число '000012' можно только если оно прочитано как строка и известна его длина.

Итого, писать программу, которая зависит от конкретного типа вывода, чтобы визуально смотрелось якобы хорошо, можно, но получится очень сложно и криво.
ЮА
Юрик Агаян
11 112
Лучший ответ
Слава Глушенко Спасибо, я понял, это то что мне было нужно, помогло) После scanf_s автоматически делался абзац, тоесть эхо было на 1 строчку выше, пробовал верт. табуляцию \v как в книжке написано, но не помогло, поэтому поменял на cscanf_s, абзац не делается, но после нажания Backspace вводится одно и тоже число до конца цикла и все, введенные числа не стирает, а если его не нажимать, то все нормально...
Надо отделять мух от котлет.

Есть потоки std{in,out,err}: это такие штуки, из которых можно доставать или совать в них байты. Откуда они там берутся и куда пропадают — это языка C не касается.

Это не scanf печатает на экран твоё число при вводе. Это эхо терминала.
Как его отключать http://stackoverflow.com/a/1455007
Слава Глушенко Можно как-то отменить это эхо?

Похожие вопросы