Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Обработка символа забоя


Автор: student80 1.9.2010, 10:15
Всем привет.
Вот изучаю С по книжке. Только на одном задании никак не пойму, что делать.
Нужно копировать ввод в вывод с обработкой символов.
Все символы обрабатываю, кроме символа забоя - это который возвращает каретку на 1 символ влево. Так вот по этому символу у меня и вопросы.
1. Допустим, что вводится последовательность 12\b34, то на выходе должно получиться 134 или 1342?
2. Как вообще ввести этот символ забоя? Используется функция getchar().
3. В веденных символах мне нужно заменить символ забоя какой-нибудь буквой, например X. Тогда при обработке символов мне нужно отменить ввод символа забоя и вывести вместо него X, но чтобы отменить символ забоя, каретку нужно передвинуть вправо. Есть такой символ, переводящий каретку вправо?

Автор: djamshud 1.9.2010, 12:03
1. 134
2. Ввести на stdin?
Код

echo -e "12\b34" | ./myprogram

Это в никсах, в винде как-то похоже должно быть.
3. Ничего не надо делать с кареткой. Она "передвигается" позже - во время вывода в терминал.

См. пример:

Код

#include<stdio.h>

int main(){
size_t s;
char buf[10];
while((s=fread(buf,1,sizeof(buf),stdin))>0){
for(size_t i=0;i<s;i++)
if(buf[i]=='\b')buf[i]='X';
printf("%.*s",s,buf);}
return 0;}


Добавлено через 36 секунд
Код

gcc stdin.c -o stdin -std=c99 && echo -e "12\b34" | ./stdin 
12X34

Автор: student80 1.9.2010, 13:11
Цитата

echo -e "12\b34" | ./myprogram

вводится smile
а когда у меня в консоли getchar() ждет ввода символов с клавиатуры, то как тогда символ вводить?
сижу в линуксе через SSH

Автор: djamshud 1.9.2010, 13:19
Да, я как-то и позабыл, что на stdin можно и с клавиатуры писатьsmile.

Фиг знает, но задача предполагет написание программы для конвеерной обработки текста, т.е.:

smth1 | myprogram | smth2

Так что не стоит заморачиваться с вводом текста с клавиатуры.

Автор: xvr 1.9.2010, 14:06
Цитата(student80 @  1.9.2010,  13:11 Найти цитируемый пост)
а когда у меня в консоли getchar() ждет ввода символов с клавиатуры, то как тогда символ вводить?
Перевести терминал в raw mode (команда stty raw) и запускать свою прогу


Автор: student80 2.9.2010, 15:12
Программа как раз предполагает ввод символов с клавиатуры smile
Но это - не суть, я и через конвеерную обработку сделаю.

xvr, с режимом raw вообще ничего ввести не могу и выйти из него не могу smile

Символ обрабатывать научился. Всем спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)