Форум «Всё о Паскале» _ Задачи _ Редактирования строки
Автор: Bokul 16.04.2006 11:30
Вот написал процедуру для редактирования строки, но она не коректно работает если был нажат пробел. Где ошибка?
procedure edit_string(x,y:byte; var s:string); var i,j:byte; ch:char; temp:string; begin i:=length(s); temp:=s; repeat gotoxy(x,y); write(s); if temp>=s then for j:=1 to ((length(temp)-length(s))) do write('*'); { На месте звездочки должен стоять пробел, но так лучше видно ошибку } gotoxy(i+x,y); temp:=s; ch:=readkey; if ch=#0 then begin ch:=readkey; case ch of #75: if i>0 then dec(i); #77: if i<length(s) then inc(i); #83: delete(s,i+1,1); end; end else case ch of #8: begin delete(s,i,1); dec(i); end;
uses crt; var s:string; begin clrscr; write('Name '); s:='pascal.dax.ru'; edit_string(6,1,s); writeln; writeln('Result : ',s); readln; end.
Автор: volvo 16.04.2006 11:48
Цитата
написал процедуру для редактирования строки, но она не коректно работает
А рассказать, ЧТО должна делать процедура, нельзя? Это "Совершенно секретно"? Как проверять, не зная необходимой функциональности???
Кстати, в FPC твоя процедура вообще не компилируется - выдает Error: duplicate case label на строке:
'+'..'-','*'..'/':begin
Автор: Bokul 16.04.2006 22:03
Цитата
А рассказать, ЧТО должна делать процедура, нельзя?
Она должна редактировать строчку, в данном случае s. Например при нажатии Backspace, удаляет символ слева от курсора, при нажатии срелок - перемещает курсор и т.д
x,y - это координаты положения начала редактирующей строки.
Цитата
Кстати, в FPC твоя процедура вообще не компилируется - выдает Error: duplicate case label
В Borland Pascal 7.0 все компилируется нормально.
Автор: Malice 16.04.2006 22:11
Цитата(Bokul @ 16.04.2006 18:03)
В Borland Pascal 7.0 все компилируется нормально.
Это от того, что интервал '*'..'/' включает в себя +'..'-'. Оставь только '*'..'/'.
Автор: Bokul 16.04.2006 22:27
Цитата
Это от того, что интервал '*'..'/' включает в себя +'..'-'. Оставь только '*'..'/'.
Да, согласен. Ище вопрос: в какой интервал входят знаки %?()"!;_
Автор: Malice 16.04.2006 22:36
Цитата(Bokul @ 16.04.2006 19:27)
Да, согласен. Ище вопрос: в какой интервал входят знаки %?()"!;_
Это несколько интервалов, иначе попадут цифры и буквы. И зачем заморачиваться? Судя по твоему коду,нет разницы пробел введен, цифра, буква или знак. Напиши один интервал " ".."я". Там все будет.
Автор: Bokul 16.04.2006 22:59
Цитата
Это несколько интервалов, иначе попадут цифры и буквы. И зачем заморачиваться? Судя по твоему коду,нет разницы пробел введен, цифра, буква или знак. Напиши один интервал " ".."я". Там все будет.
Спасибо , не знал.
Ошибку нашел, вот
Код
if temp>=s then
надо проверять их длины, а я даже не знаю что этим проверяю