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

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Flader
незнакомец
Сообщения: 2
Зарегистрирован: 01.08.2011 18:48:39

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

Сообщение 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
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение 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%.

Второе типа совета, если пишите на чистом фрипаскале и используете его ИДЕ, то поставьте Лазарус, и в нем пишите теже самые консольные приложения, но получите хороший редактор кода + плюшки и всякие радости :).
Flader
незнакомец
Сообщения: 2
Зарегистрирован: 01.08.2011 18:48:39

Сообщение Flader »

Maxizar, к сожалению, не помогло. Все точно так же. За советы спасибо. Попробую лазарус, возможно, там ошибка исчезнет.
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

Да, в режиме отладки FreePascal не вполне гладко работает :(
Попробуйте что-то еще: Лазарус или даже Borland Pascal - он надежней.
Вашей вины тут нет.
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

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

0.о
SWEET
незнакомец
Сообщения: 2
Зарегистрирован: 09.11.2018 21:36:42

Сообщение SWEET »

Добрый день. Возникла абсолютно та же проблема, что описана в корневом сообщении. Может быть кто-то смог решить эту проблему применительно к Free Pascal, чтобы не нужно было переходить на Lazarus и т.д.? Очень надеюсь на положительный ответ. Спасибо!
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

SWEET, какая операционная система и используемый терминал для запуска программы?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

SWEET
Заодно и версию FreePascal напишите. У меня 3.0.4 и код работает как нужно.
SWEET
незнакомец
Сообщения: 2
Зарегистрирован: 09.11.2018 21:36:42

Сообщение SWEET »

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

Сообщение Дож »

SWEET, если запускать программу не из FP IDE, а из cmd.exe, то ошибочное поведение остаётся?
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

SWEET, попробуйте запустить компилятор/отлаживаемую прогу в режиме совместимости, перейти на транковую версию fpc.
Глюки при смене платформы периодически бывают и иногда с этим приходится мириться.

Кстати, консольное GUI, если правильно помню, почти не обновляется, т.к. мало кому нужно.
Попробуйте проверить файл настроек... возможно, компилятор не находит нужной утилиты.
Alex2013
долгожитель
Сообщения: 3257
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Мой совет: не мучить "классические консольные программы" (все равно даже реальные консольные утилиты сейчас пишутся совсем иначе ) А сразу разбираться с GUI программированием, как не покажется странным сейчас начинающему значительно проще начать именно с них .
Для ускоренного проникновения в мир "оконного программирования " можно использовать например среду ХайАсм
( hiasm.com ) Кстати один из используемых компиляторов там как раз FPC...
Главное не забудьте вовремя вернутся к более консервативным средам разработки вроде Лазаруса .
(Дело в том, что реально серьезное программирование в ХайАсм тоже возможно, но требует гораздо больших знаний чем может дать сама среда ХайАсм. ) Но для начинающего это почти рай ! :idea:
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Alex2013, я бы не был так категоричен. Иногда и в чистой консоли надо поработать. Бывает, что и вообще только в режиме командной строки.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3073
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

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

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

Это точно НЕ для начинающих и, при нужде, осваивается на раз потом.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

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


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

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


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