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

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

СообщениеДобавлено: 08.02.2011 01:19:22
DDR
Я тут вот с каким вопросом. Пишу программу "телефонная книга", алгоритм готов на бумаге. Начал кодирование, и тут столкнулся со следующей проблемой. При линейном вызове процедуры из модуля, процедура выполняет код нормально (в данном случае создает файл, имя задается переменной). Но если ту же процедуру вызывать из конструкций 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.

Программа выводит "Введите имя файла", и завершает свою работу.
Может, я книжки верх ногами читаю?!
Подскажите мне молодому, не опытному, что тут не так. Буду очень благодарен за совет.

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

СообщениеДобавлено: 08.02.2011 02:00:13
VirtUX
Возможно:
Код: Выделить всё
uses crt,pr;
var I:string;
BEGIN
write('Создать файл - "1": ');
read (I);
if I = '1' then MakePh;
END.

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

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

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

СообщениеДобавлено: 09.02.2011 00:37:17
Alexey_Melky
Попробуй вместо Read(I) использовать ReadLn(I).

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

СообщениеДобавлено: 09.02.2011 01:18:21
DDR
Спасибо большое за readln :D Процедура работает исправно :D :D :D
Подскажите, где найти информацию о таких деталях?

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

СообщениеДобавлено: 09.02.2011 10:58:02
informat
Во всех приличных книгах по Pascal, в разделах о read и readln.
Например.
Мансуров К.Т. Основы программирования в среде Lazarus, 2010.
Глава 2 Введение в язык программирования Pascal.
Стр. 57
При использовании оператора read в буфере остается код клавиши Enter. В некоторых случаях это может привести к неправильной работе следующего оператора ввода.

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

СообщениеДобавлено: 09.02.2011 16:48:42
DDR
Спасибо.