Когда я ввожу значение переменной, вместо возвращения к коду компилятор просто перемещает курсор в начало строки и как бы требует ввести значение еще раз. Потом я понял, что то второе значение используется после, когда программе нужно будет ввести значение уже другой переменной. Наверное, я объясняю ужасно, поэтому покажу на примере.
- Код: Выделить всё
Write('Введите строку: '); Readln(S);
на экране:
Введите строку: (тут стоит курсор)
Ввожу строку, например AAAA. На экране:
Введите строку: AAAA
После нажатия enter курсор перемещается в начало строки (т.е. на букву В) и требует ввести значение снова. При отладке видно, как самое первое значение вводится в переменную, независимо от того, что было введено во второй раз. Строка обрабатывается в программе, но печатается в начало первой строки. Т.е. если результат будет BBBB, то 1 строка будет выглядеть так:
BBBBите строку: AAAA
При повторном вводе (программа повторяется 3 раза с помощью цикла) значение требуется ввести только один раз, но независимо от того, что было введено, переменная S использует то значение, что было введено в первый раз, когда курсор внезапно скаканул в начало строки. А то значение, что было введено при втором запуске (т.е. уже в третий раз, первые два раза были при первом запуске) переносится на третий запуск и т.д.
При этом такая проблема существует только в режиме отладки, в обычным запуске все нормально.
Чтобы было понятнее, привожу код и результаты вывода.
Код (программа просто заменяет символы A в введенной строке на B:
- Код: Выделить всё
var S: string; k: integer;
procedure Scan(var arg : string);
var k: integer;
begin
for k:=1 to Length(arg) do
if arg[k]='A' then arg[k]:='B';
end;
begin
for k:=1 to 3 do begin
Write('Введите строку: '); Readln(S);
Scan(S);
Writeln(S);
end;
end.
То, что получается при обычном запуске:
Введите строку: ABBA
BBBB
Введите строку: BBFA
BBFB
Введите строку: AACA
BBCB
И что получается при отладке:
BBBBите строку: ABBA
Введите строку: BBFA
BBFBите строку: AACA
ОС: Windows 7, версия комплитора 2.4.4