IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Ввод строки типа Pchar
ammaximus
сообщение 14.11.2006 16:13
Сообщение #1


Ночной волк
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской

Репутация: -  1  +


В задаче ввод из входного потока.
Ввести 2 длинные строки.
программа<файл:
строка1
строка2

Ну я и пишу
Код

{X+}
var a,b:PChar;
    an,bn:integer;
    c:char;
    flag:boolean;
begin
{Intro}
flag:=True;
an:=0;
while flag do
begin
    read(c);
  If ord(c)=13 then
   flag:=false
  else a[an]:=c;
  inc(an);
end;
flag:=True;
bn:=1;
while flag do
begin
  read(c);
  If ord(c)=13 then
  flag:=false
  else b[bn]:=c;
  inc(bn);
end;
{/Intro}
writeln(a);
writeln(b);


readln;
end.


А как писать правильно? Как организовать ввод, если неизвестно кол-во символов?


--------------------
Не думай о белой обезьяне.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
xds
сообщение 14.11.2006 21:15
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


program LongStr;

uses
Crt, Strings;

procedure Realloc(var p: Pointer; OldSize, NewSize: Word);
var
t: Pointer;
begin
GetMem(t, NewSize);
if p <> nil then
begin
if OldSize < NewSize then
Move(p^, t^, OldSize)
else
Move(p^, t^, NewSize);
FreeMem(p, OldSize);
end;
p := t;
end;

function ReadLongStr: PChar;
var
Buf: array[0..255] of Char;
c: Char;
i, n: Integer;
r: PChar;
begin
r := nil;
n := 0;
repeat
i := 0;
while i < SizeOf(Buf) do
begin
c := ReadKey;
if c = #13 then Break;
Write( c );
Buf[i] := c;
Inc(i);
end;
Realloc(Pointer( r ), n, n + i + 1);
Move(Buf, r[n], i);
Inc(n, i);
until c = #13;
Writeln;
r[n] := #0;
ReadLongStr := r;
end;

procedure FreeLongStr(s: PChar);
begin
FreeMem(s, StrLen(s) + 1);
end;

var
a, b: PChar;

begin
a := ReadLongStr;
b := ReadLongStr;
Writeln(a);
Writeln(b);
FreeLongStr(a);
FreeLongStr(b);
end.

Всё, пошёл спать... (кстати, (с) в коде заменяется на символ ©, в r в том же месте - на ®)

Сообщение отредактировано: xds - 14.11.2006 21:18


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
ammaximus   Ввод строки типа Pchar   14.11.2006 16:13
volvo   Тебе нужна процедура типа: procedure input_pchar(...   14.11.2006 17:13
xds   volvo, ты заблуждаешься: PChar - указатель на симв...   14.11.2006 20:24
volvo   Правда? И что же я написал такого, что в корне нев...   14.11.2006 20:33
xds   2 volvo Работать будет, но в корне неверно, т. к. ...   14.11.2006 20:53
xds   program LongStr; uses Crt, Strings; procedure ...   14.11.2006 21:15
ammaximus   Здесь Volvo ошибся, однако исправляется это просто...   14.11.2006 22:41
xds   То же самое... New для указателя PChar выделяет м...   15.11.2006 5:59
ammaximus   То же самое... [b]New для указателя PChar выделяе...   15.11.2006 13:17
xds   При чтении таким образом двух строк одна из них бу...   15.11.2006 14:25
ammaximus   Не знаю... У меня работает нормально при даже оч....   15.11.2006 14:46
volvo   Я вводил больше 400, ты мне говоришь 127... Странн...   15.11.2006 15:52
ammaximus   Пищит на 128-й типа переполнен буфер. Возможно ош...   15.11.2006 17:15
volvo   А вообще... Я заглянул в модуль Strings... Смотри-...   15.11.2006 17:30
ammaximus   А... Strnew... Интересно... Много лишней памяти ра...   15.11.2006 17:54
xds   Ничего странного: программа, содержащая ошибки при...   15.11.2006 17:59


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 3:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"