Страница 1 из 2

проблема с отладкой

СообщениеДобавлено: 01.08.2011 19:14:38
Flader
Здравствуйте. Я новичок, изучаю паскаль по книге "Песни о Паскале", где для решения задач рекомендуется компилятор Free Pascal, который я и использую. Столкнулся с проблемой во время отладки проекта.
Когда я ввожу значение переменной, вместо возвращения к коду компилятор просто перемещает курсор в начало строки и как бы требует ввести значение еще раз. Потом я понял, что то второе значение используется после, когда программе нужно будет ввести значение уже другой переменной. Наверное, я объясняю ужасно, поэтому покажу на примере.
Код: Выделить всё
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

Re: проблема с отладкой

СообщениеДобавлено: 01.08.2011 20:04:52
Maxizar
Ну я чисто скопипастил ваш код и изменил только одно, это вот это:
Код: Выделить всё
Write('Введите строку: '); Readln(S);


Заменил на это:

Код: Выделить всё
Write('Введите строку: ');
Readln(S);


И у меня все ништяк... Именно как с так и без отладки все гуд...
возьму на себя смелость сказать (типа дать совет): писать так никогда нестоит, ни для себя ни для других.
так очень плохо:
Код: Выделить всё
Write('Введите строку: '); Readln(S);

Лучше так:
Код: Выделить всё
Write('Введите строку: ');
Readln(S);


Это что:?
Код: Выделить всё
if arg[k]='A' then arg[k]:='B';

Лучше так:
Код: Выделить всё
if arg[k]='A' then
   arg[k]:='B';


А так молодцы, отступы по два пробела и все такое :)... про цикл фор, а именно про перенос бегина, промолчу, тут уж как привыкли, лично я переношу в 90%.

Второе типа совета, если пишите на чистом фрипаскале и используете его ИДЕ, то поставьте Лазарус, и в нем пишите теже самые консольные приложения, но получите хороший редактор кода + плюшки и всякие радости :).

Re: проблема с отладкой

СообщениеДобавлено: 01.08.2011 20:15:05
Flader
Maxizar, к сожалению, не помогло. Все точно так же. За советы спасибо. Попробую лазарус, возможно, там ошибка исчезнет.

Re: проблема с отладкой

СообщениеДобавлено: 01.08.2011 22:33:38
Oleg_D
Да, в режиме отладки FreePascal не вполне гладко работает :(
Попробуйте что-то еще: Лазарус или даже Borland Pascal - он надежней.
Вашей вины тут нет.

Re: проблема с отладкой

СообщениеДобавлено: 02.08.2011 06:31:50
Brainenjii
Да, в режиме отладки FreePascal не вполне гладко работает
Попробуйте что-то еще: Лазарус...

0.о

Re: проблема с отладкой

СообщениеДобавлено: 09.11.2018 22:44:30
SWEET
Добрый день. Возникла абсолютно та же проблема, что описана в корневом сообщении. Может быть кто-то смог решить эту проблему применительно к Free Pascal, чтобы не нужно было переходить на Lazarus и т.д.? Очень надеюсь на положительный ответ. Спасибо!

Re: проблема с отладкой

СообщениеДобавлено: 10.11.2018 19:39:53
Дож
SWEET, какая операционная система и используемый терминал для запуска программы?

Re: проблема с отладкой

СообщениеДобавлено: 11.11.2018 06:33:56
Vadim
SWEET
Заодно и версию FreePascal напишите. У меня 3.0.4 и код работает как нужно.

Re: проблема с отладкой

СообщениеДобавлено: 11.11.2018 14:57:37
SWEET
Windows 10. Версия Free Pascal 3.0.4. Используемый терминал для запуска программы - не совсем понимаю, что это...
На другом компе та же версия Free Pascal работала абсолютно нормально на Windows 7. А вот на новом ноутбуке с Windows 10 начались описанные выше проблемы.. : /

Re: проблема с отладкой

СообщениеДобавлено: 11.11.2018 15:08:57
Дож
SWEET, если запускать программу не из FP IDE, а из cmd.exe, то ошибочное поведение остаётся?

Re: проблема с отладкой

СообщениеДобавлено: 11.11.2018 15:11:48
Лекс Айрин
SWEET, попробуйте запустить компилятор/отлаживаемую прогу в режиме совместимости, перейти на транковую версию fpc.
Глюки при смене платформы периодически бывают и иногда с этим приходится мириться.

Кстати, консольное GUI, если правильно помню, почти не обновляется, т.к. мало кому нужно.
Попробуйте проверить файл настроек... возможно, компилятор не находит нужной утилиты.

Re: проблема с отладкой

СообщениеДобавлено: 12.11.2018 01:55:57
Alex2013
Мой совет: не мучить "классические консольные программы" (все равно даже реальные консольные утилиты сейчас пишутся совсем иначе ) А сразу разбираться с GUI программированием, как не покажется странным сейчас начинающему значительно проще начать именно с них .
Для ускоренного проникновения в мир "оконного программирования " можно использовать например среду ХайАсм
( hiasm.com ) Кстати один из используемых компиляторов там как раз FPC...
Главное не забудьте вовремя вернутся к более консервативным средам разработки вроде Лазаруса .
(Дело в том, что реально серьезное программирование в ХайАсм тоже возможно, но требует гораздо больших знаний чем может дать сама среда ХайАсм. ) Но для начинающего это почти рай ! :idea:

Re: проблема с отладкой

СообщениеДобавлено: 12.11.2018 06:56:09
Лекс Айрин
Alex2013, я бы не был так категоричен. Иногда и в чистой консоли надо поработать. Бывает, что и вообще только в режиме командной строки.

Re: проблема с отладкой

СообщениеДобавлено: 12.11.2018 09:29:51
Снег Север
Alex2013 писал(а):Мой совет: не мучить "классические консольные программы" (все равно даже реальные консольные утилиты сейчас пишутся совсем иначе ) А сразу разбираться с GUI программированием, как не покажется странным сейчас начинающему значительно проще начать именно с них .
+100500

Добавлено спустя 1 минуту 5 секунд:
Лекс Айрин писал(а):Иногда и в чистой консоли надо поработать.

Это точно НЕ для начинающих и, при нужде, осваивается на раз потом.

Re: проблема с отладкой

СообщениеДобавлено: 12.11.2018 10:36:21
Лекс Айрин
Снег Север писал(а):Это точно НЕ для начинающих и, при нужде, осваивается на раз потом.


Проблема в том, что иногда просто не нужны гуевые среды от слова вообще. И даже вредны. Например, при разработке для систем без GUI.
И, кстати, не факт, что я сейчас смогу собрать чисто консольную программу сложнее hello World.

Alex2013 писал(а):Для ускоренного проникновения в мир "оконного программирования " можно использовать например среду ХайАсм


С учетом древней версии встроенного в нее FPC (и обрезанного по самое не могу) совет странноват. Лучше использовать поставляемые с паскалем примеры.