Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / непонятный баг турбо паскаля / 21 сообщений из 21, страница 1 из 1
17.07.2008, 13:18
    #35436559
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
Всем привет!
Хотел попрсить помощи.
Написал прогу, - не работает путем, собака. Прога простая. Однако, баг ну очень непонятный.
Будет время - гдяньте пож.
Текст проги.
uses
crt;
var
i:integer;
str:string;
key:byte;
ch:char;
begin
repeat
begin
clrscr;
readln(str);
writeln('do you want to exit');
key:=0;
repeat
if keypressed then key:=ord(readkey);
until (key=121) or (key=110);
if key=121 then halt;
end;
until (str='exit');
end.

Читает строку с экрана. Затем просит символ и если символ равен 'y', то выходит, а если 'n', то входит в цикл снова. Все длится до тех пор, пока строковая констаната, введенная с экрана, не примет значение 'exit'.
Так вот баг в следующем.
Если ввожу строку длиной меньше 3-х символов в текущем цикле и потом 'y', то в следующей итерации цикла при следующем вводе строки первые 2 символа ну никак не хотят высвечиваться на экране и только после ввода третьего символа высвечивается вся строка. Если же ввести строку из 3 символов в текущей итерации, то в след. итерации все ок.
При этом если убрать очищение экрана в начале цикла, - все начинает работаь нормально.
В чем батва, не пойму...
Кто знает - помогите.
...
Рейтинг: 0 / 0
17.07.2008, 14:06
    #35436760
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
Хм, сессия в июле? Совсем замучили студентов...
...
Рейтинг: 0 / 0
17.07.2008, 14:29
    #35436841
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
И вот нет ведь, чтоб по существу ответить...
По-моему если не знаешь - лучше просто промолчать.
Кстати институт я 5 лет назад закончил с красным дипломом.
Сейчас измерениями джиттера в сетях SDH занимаюсь, если интересно...
Программа нужна для работы.
...
Рейтинг: 0 / 0
17.07.2008, 14:30
    #35436846
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
эта программа - маленький кусочек более большого целого.
...
Рейтинг: 0 / 0
17.07.2008, 14:41
    #35436895
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
sergey_tarasovИ вот нет ведь, чтоб по существу ответить...
По-моему если не знаешь - лучше просто промолчать.
Кстати институт я 5 лет назад закончил с красным дипломом.
Сейчас измерениями джиттера в сетях SDH занимаюсь, если интересно...
Программа нужна для работы.
И даже не нашли на форуме кнопку src, чтоб код был читабелен. В таком виде его смотреть невозможно.
...
Рейтинг: 0 / 0
17.07.2008, 14:45
    #35436903
Aklin J
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
сложно понять, что требуется.
по тому, что я только что прочитал, halt прерывает выполнение всей программы. следовательно, второй итерации цикла быть не может, или про halt не то написали.

варианты: поиграться с различным положением write, ln, read, clrscr и т.д.

форматированный код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
uses
	crt;
var
	i:integer;
	str:string;
	key:byte;
	ch:char;
begin
	repeat	
		begin
			clrscr;
			readln(str);
			writeln('do you want to exit');
			key:= 0 ;
			repeat
				if keypressed then 
					key:=ord(readkey);
			until (key= 121 ) or (key= 110 );
			if key= 121  then 
				halt;
		end;
	until (str='exit');
end.
...
Рейтинг: 0 / 0
17.07.2008, 14:48
    #35436918
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
XDiaBLoИ даже не нашли на форуме кнопку src, чтоб код был читабелен. В таком виде его смотреть невозможно.
uses
crt;
var
i:integer;
str:string;
key:byte;
begin
repeat
begin
clrscr;
readln(str);
writeln('do you want to exit');
key:=0;
repeat
if keypressed then key:=ord(readkey);
until (key=121) or (key=110);
if key=121 then halt;
end;
until (str='exit');
end.[src][/src]
первый раз знаете ли на таком форуме...
вроде так.
...
Рейтинг: 0 / 0
17.07.2008, 14:49
    #35436922
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
uses
 crt;
var
 i:integer;
 str:string;
 key:byte;
begin
 repeat
  begin
   clrscr;
   readln(str);
   writeln('do you want to exit');
   key:= 0 ;
   repeat
    if keypressed then key:=ord(readkey);
   until (key= 121 ) or (key= 110 );
   if key= 121  then halt;
  end;
 until (str='exit');
end.

или так...
...
Рейтинг: 0 / 0
17.07.2008, 14:50
    #35436927
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
Aklin Jсложно понять, что требуется.
по тому, что я только что прочитал, halt прерывает выполнение всей программы. следовательно, второй итерации цикла быть не может, или про halt не то написали.

варианты: поиграться с различным положением write, ln, read, clrscr и т.д.

форматированный код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
uses
	crt;
var
	i:integer;
	str:string;
	key:byte;
	ch:char;
begin
	repeat	
		begin
			clrscr;
			readln(str);
			writeln('do you want to exit');
			key:= 0 ;
			repeat
				if keypressed then 
					key:=ord(readkey);
			until (key= 121 ) or (key= 110 );
			if key= 121  then 
				halt;
		end;
	until (str='exit');
end.


однако, все танцы с бубном перепробованы...
...
Рейтинг: 0 / 0
17.07.2008, 14:54
    #35436941
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
Aklin Jсложно понять, что требуется.
по тому, что я только что прочитал, halt прерывает выполнение всей программы. следовательно, второй итерации цикла быть не может, или про halt не то написали.

варианты: поиграться с различным положением write, ln, read, clrscr и т.д.

форматированный код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
uses
	crt;
var
	i:integer;
	str:string;
	key:byte;
	ch:char;
begin
	repeat	
		begin
			clrscr;
			readln(str);
			writeln('do you want to exit');
			key:= 0 ;
			repeat
				if keypressed then 
					key:=ord(readkey);
			until (key= 121 ) or (key= 110 );
			if key= 121  then 
				halt;
		end;
	until (str='exit');
end.


halt прерывет, если после строки в ответ на 'do you want to exit' ввест 'y'.
он все правильно делает.
поясню.
это нужно для того, чтобы если чел неправильно ввел переменную вернуть его обратно для ввода или по его желанию осуществить выход из программы.
...
Рейтинг: 0 / 0
17.07.2008, 14:55
    #35436945
474
474
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
sergey_tarasovТак вот баг в следующем.
Если ввожу строку длиной меньше 3-х символов в текущем цикле и потом 'y', то в следующей итерации цикла
А откуда она взялась, следующая итерация, при ответе 'y'?
...
Рейтинг: 0 / 0
17.07.2008, 15:14
    #35437023
Aklin J
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
474 sergey_tarasovТак вот баг в следующем.
Если ввожу строку длиной меньше 3-х символов в текущем цикле и потом 'y', то в следующей итерации цикла
А откуда она взялась, следующая итерация, при ответе 'y'?
+1
...
Рейтинг: 0 / 0
17.07.2008, 15:20
    #35437045
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
Aklin J 474 sergey_tarasovТак вот баг в следующем.
Если ввожу строку длиной меньше 3-х символов в текущем цикле и потом 'y', то в следующей итерации цикла
А откуда она взялась, следующая итерация, при ответе 'y'?
+1

пардон 'y' с 'n' перепутал :) в абзаце:

Если ввожу строку длиной меньше 3-х символов в текущем цикле и потом 'y', то в следующей итерации цикла при следующем вводе строки первые 2 символа ну никак не хотят высвечиваться на экране и только после ввода третьего символа высвечивается вся строка. Если же ввести строку из 3 символов в текущей итерации, то в след. итерации все ок.

в остальном все так как написал.
...
Рейтинг: 0 / 0
17.07.2008, 15:30
    #35437090
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
sergey_tarasovВсем привет!
Хотел попрсить помощи.
Написал прогу, - не работает путем, собака. Прога простая. Однако, баг ну очень непонятный.
Будет время - гдяньте пож.
Текст проги.
uses
crt;
var
i:integer;
str:string;
key:byte;
ch:char;
begin
repeat
begin
clrscr;
readln(str);
writeln('do you want to exit');
key:=0;
repeat
if keypressed then key:=ord(readkey);
until (key=121) or (key=110);
if key=121 then halt;
end;
until (str='exit');
end.

Читает строку с экрана. Затем просит символ и если символ равен 'y', то выходит, а если 'n', то входит в цикл снова. Все длится до тех пор, пока строковая констаната, введенная с экрана, не примет значение 'exit'.
Так вот баг в следующем.
Если ввожу строку длиной меньше 3-х символов в текущем цикле и потом 'n', то в следующей итерации цикла при следующем вводе строки первые 2 символа ну никак не хотят высвечиваться на экране и только после ввода третьего символа высвечивается вся строка. Если же ввести строку из 3 символов в текущей итерации, то в след. итерации все ок.
При этом если убрать очищение экрана в начале цикла, - все начинает работаь нормально.
В чем батва, не пойму...
Кто знает - помогите.

Кстати, то же самое наблюдается при вводе любой другой переменной - символьной, целой, вещественной и т.д.
...
Рейтинг: 0 / 0
17.07.2008, 16:12
    #35437242
474
474
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
Если не принципиально использование именно процедуры clrscr, используйте вместо нее textmode(c80).
...
Рейтинг: 0 / 0
17.07.2008, 16:26
    #35437300
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
474Если не принципиально использование именно процедуры clrscr, используйте вместо нее textmode(c80).

ОДНАКО!..
вот он специалист! Спасибо - все заработало!
если не сложно, - педелитесь секретом? в чем была "фишка"?
...
Рейтинг: 0 / 0
18.07.2008, 09:37
    #35438312
474
474
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
sergey_tarasovесли не сложно, - педелитесь секретом? в чем была "фишка"?
Это не фича, это баг. У crt багов много, по-моему в каком-то из SWAG'ов я даже перечень видел.
...
Рейтинг: 0 / 0
18.07.2008, 12:04
    #35438812
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
474 sergey_tarasovесли не сложно, - педелитесь секретом? в чем была "фишка"?
Это не фича, это баг. У crt багов много, по-моему в каком-то из SWAG'ов я даже перечень видел.

ну я ж так и подозревал, что это баг (см. название темы).
мои предположения оправдались.
спасибо!
кстати, это никак не лечится?
...
Рейтинг: 0 / 0
19.07.2008, 21:06
    #35440964
непонятный баг турбо паскаля
sergey_tarasovИ вот нет ведь, чтоб по существу ответить...
По-моему если не знаешь - лучше просто промолчать.
Кстати институт я 5 лет назад закончил с красным дипломом.
Сейчас измерениями джиттера в сетях SDH занимаюсь, если интересно...
Программа нужна для работы.

А C - слышали такой язык?

ПС. Хотя бы для приличия FreePascal for DOS 2.0.4 поставили бы
...
Рейтинг: 0 / 0
21.07.2008, 09:19
    #35441630
sergey_tarasov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
Ынтырпрайс sergey_tarasovИ вот нет ведь, чтоб по существу ответить...
По-моему если не знаешь - лучше просто промолчать.
Кстати институт я 5 лет назад закончил с красным дипломом.
Сейчас измерениями джиттера в сетях SDH занимаюсь, если интересно...
Программа нужна для работы.

А C - слышали такой язык?

ПС. Хотя бы для приличия FreePascal for DOS 2.0.4 поставили бы

С знаете ли для продвинутых программеров, а я так... только в паскале и умею. С мне нет надобности знать, - я свзист, а не программист.
И вообще Паскаль - это уже неприлично что ли? :)

Модератор:
в высшей степени прилично
...
Рейтинг: 0 / 0
21.07.2008, 10:11
    #35441714
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонятный баг турбо паскаля
sergey_tarasov Ынтырпрайс sergey_tarasovИ вот нет ведь, чтоб по существу ответить...
По-моему если не знаешь - лучше просто промолчать.
Кстати институт я 5 лет назад закончил с красным дипломом.
Сейчас измерениями джиттера в сетях SDH занимаюсь, если интересно...
Программа нужна для работы.

А C - слышали такой язык?

ПС. Хотя бы для приличия FreePascal for DOS 2.0.4 поставили бы

С знаете ли для продвинутых программеров, а я так... только в паскале и умею. С мне нет надобности знать, - я свзист, а не программист.
И вообще Паскаль - это уже неприлично что ли? :)
Это уже тема для нового холивара...
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / непонятный баг турбо паскаля / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]