Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2012, 02:37   #1
MD1
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 17
По умолчанию Records

Здраствуйте!
Есть некоторая запись:
Код:
K1 = record
blabla:integer;
blabla1:string[10];
blabla2:string;
blabla3:record
blabla3:integer;
end;
end;
var
b:k1;
При попытке ввода полей с клавы, вот к примеру:
Код:
writeln ('blabla1');
   readln (b.blabla1);

   writeln('blabla2');
   readln (b.blabla2);
Выходит так что игнорируется ввод readln (b.blabla1);
Но если поставить первым на ввод, к примеру:

Код:
writeln('blabla');
   readln (blabla);
то
Код:
writeln ('blabla1');
   readln (b.blabla1);

   writeln('blabla2');
   readln (b.blabla2);
вводится без проблем.

Вопрос: почему игнорируеться ввод стрингового поля если перед ним нету поля интегер?

Последний раз редактировалось MD1; 30.01.2012 в 02:44.
MD1 вне форума Ответить с цитированием
Старый 30.01.2012, 03:22   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

приведите весь код, или кусок, по идее игнорироваться не должно
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 30.01.2012, 04:05   #3
MD1
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Niro Посмотреть сообщение
приведите весь код, или кусок, по идее игнорироваться не должно
Я и сам сильно удивился этому случаю.

Код:
Program BD;
uses crt;
type
K1 = record
N:integer;
date:string[10];
event:string;
Results:record
Amount:integer;
Time:array[1..100] of string;

end;
end;

var
TTT:string;
b:k1;
BDKote,a,aaa,l,i,j,n,tttt:integer;
f1: file of k1;
f2: text;
label M1,M2,M3,Moff1;

begin
ttt:='runing';

clrscr;
assign (f1,'bd1.bd');
assign (f2,'BDKote.txt');

Moff1:
writeln;
writeln('Write event          "1"');
writeln('Show list of records "2"');
writeln('Exit                 "3"');
read(A);
clrscr;
if a=1 then goto M1; if a=2 then goto M2; if a=3 then goto M3;

M1: {MMMMMMMMMM111}

 {  writeln ('Enter number');
   readln(b.n);
for i:=1 to length(b.n do c:=c+1; }




   writeln ('Enter event');
   readln (b.event);

   writeln('date');
   readln (b.date);

   writeln('kolv');
   readln (b.results.Amount);

for i:=1 to (b.results.Amount) do begin

   writeln('time');
   readln (b.results.time[i]);  end;

Кусок с БД

На экран выводит:

Enter event
date
(а затем Предлогает ввести поле b.date проигнорировав b.event)

Последний раз редактировалось MD1; 30.01.2012 в 04:08.
MD1 вне форума Ответить с цитированием
Старый 30.01.2012, 08:55   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я и сам сильно удивился этому случаю.
Ниче удивительного. Классическая ошибка студентов. Не учитываешь разницу между read и readln.
У тебя
Код:
writeln;
writeln('Write event          "1"');
writeln('Show list of records "2"');
writeln('Exit                 "3"');
read(A);
clrscr;
Считывает в А некое значение, оставляя в буфере ввода символы перевода каретки, который успешно подхватывает первый же readln, считая ввод для себя оконченным.

Кстати - код жутковат, работать может нестабильно. На твоем месте я бы отказался от меток, и переписал бы его по другому.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2012, 17:42   #5
MD1
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 17
По умолчанию

Код:
readln(a)
исправило ошибку.

В чом нестабильность кода?
MD1 вне форума Ответить с цитированием
Старый 30.01.2012, 18:23   #6
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Цитата:
Сообщение от MD1 Посмотреть сообщение
Код:
readln(a)
исправило ошибку.

В чом нестабильность кода?
Нестабильность он имел ввиду метки. Для культурности кода от них желательно отказаться. Да и код вы не красиво оформляете!
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Старый 30.01.2012, 23:36   #7
MD1
Пользователь
 
Регистрация: 11.11.2011
Сообщений: 17
По умолчанию

мм.. чем же метки заменить???
MD1 вне форума Ответить с цитированием
Старый 30.01.2012, 23:46   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, примерно так (код выхватил из чужого примера, так что на имена пуктов меню и процедур внимания не обращайте - главное, ухватите идею!)
Код:
Repeat
   Writeln ('================================');
   Writeln (' PROGRAM List');
   Writeln ('================================');
   Writeln ('1: Dobavit element v spisok-1  ');
   Writeln ('2: Udalit element v spisok-2   ');
   Writeln ('3: Prosmotr spiska-1           ');
   Writeln ('4: Prosmotr spiska-2           ');
   Writeln ('5: Save                        ');
   Writeln ('6: Load                        ');
   Writeln ('0: Exit                        ');
   Writeln ('================================');
   Readln (key); 
   case key of 
      '1': AddList(curA,HeadA,true); 
      '2': DelList(curA,curB,HeadA,HeadB); 
      '3': ScanList(curA,HeadA);
      '4': ScanList(curB,HeadB); 
      '5': Save (cura,HeadA,a);
      '6': Load (A, cura,HeadA);
   end; 
until key ='0';
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
master has detail records cannot delete or modify при удалении записи hunter03 БД в Delphi 5 30.03.2011 22:23
Записи (Records) Mardessa Помощь студентам 5 08.11.2010 09:42