Проблема: процедура не нормально работает

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

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

Проблема: процедура не нормально работает

Сообщение DDR » 08.02.2011 01:19:22

Я тут вот с каким вопросом. Пишу программу "телефонная книга", алгоритм готов на бумаге. Начал кодирование, и тут столкнулся со следующей проблемой. При линейном вызове процедуры из модуля, процедура выполняет код нормально (в данном случае создает файл, имя задается переменной). Но если ту же процедуру вызывать из конструкций if then, repeat - until, case и т.д. то она проходит без создания файла. Если имя задать константой то все нормально проходит.
Код сильно утрирован для простоты восприятия:
Код: Выделить всё
Unit pr;
INTERFACE
procedure MakePh;

IMPLEMENTATION
procedure MakePh;
const c='.ph';
type
   phon = record
   Surname:string[10];
   Name:string[10];
   Telephon:string[10];
   Stat:boolean;
   end;
   Ph = array [1..11] of phon;
var
F:file of Ph;
Name:string;

begin
write('Введите имя файла: ');
readln(Name);
Name:=Name+c;
Assign(F,Name);
{$I-}
reset(F);
if Ioresult <> 0 then rewrite(F);
{$I+}
close(F);
end;

BEGIN
END.

при вызове из основной программы с линейным алгоритмом:
Код: Выделить всё
uses crt,pr;

BEGIN
MakePh;
END.

Файл создается.
При вызове из основной программы с нелинейным алгоритмом.
Код: Выделить всё
uses crt,pr;
var I:integer;
BEGIN
write('Создать файл - "1": ');
read (I);
if I = 1 then MakePh;
END.

Программа выводит "Введите имя файла", и завершает свою работу.
Может, я книжки верх ногами читаю?!
Подскажите мне молодому, не опытному, что тут не так. Буду очень благодарен за совет.
DDR
незнакомец
 
Сообщения: 5
Зарегистрирован: 07.02.2011 12:19:57

Re: Проблема: процедура не нормально работает

Сообщение VirtUX » 08.02.2011 02:00:13

Возможно:
Код: Выделить всё
uses crt,pr;
var I:string;
BEGIN
write('Создать файл - "1": ');
read (I);
if I = '1' then MakePh;
END.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Проблема: процедура не нормально работает

Сообщение DDR » 09.02.2011 00:28:26

Попробовал, не помогло. У меня впечатление, что это компилятор кривой. Никак не могу обойти этот косяк. Сижу на Ubuntu 10.10, редактор Geany 0.19.1, Free Pascal Compiler version 2.4.0-2 [2010/03/06] for i386. Грешу уже на все(((
DDR
незнакомец
 
Сообщения: 5
Зарегистрирован: 07.02.2011 12:19:57

Re: Проблема: процедура не нормально работает

Сообщение Alexey_Melky » 09.02.2011 00:37:17

Попробуй вместо Read(I) использовать ReadLn(I).
Alexey_Melky
новенький
 
Сообщения: 21
Зарегистрирован: 14.05.2005 14:55:31

Re: Проблема: процедура не нормально работает

Сообщение DDR » 09.02.2011 01:18:21

Спасибо большое за readln :D Процедура работает исправно :D :D :D
Подскажите, где найти информацию о таких деталях?
DDR
незнакомец
 
Сообщения: 5
Зарегистрирован: 07.02.2011 12:19:57

Re: Проблема: процедура не нормально работает

Сообщение informat » 09.02.2011 10:58:02

Во всех приличных книгах по Pascal, в разделах о read и readln.
Например.
Мансуров К.Т. Основы программирования в среде Lazarus, 2010.
Глава 2 Введение в язык программирования Pascal.
Стр. 57
При использовании оператора read в буфере остается код клавиши Enter. В некоторых случаях это может привести к неправильной работе следующего оператора ввода.
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name

Re: Проблема: процедура не нормально работает

Сообщение DDR » 09.02.2011 16:48:42

Спасибо.
DDR
незнакомец
 
Сообщения: 5
Зарегистрирован: 07.02.2011 12:19:57


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru