Цитата:
Сообщение от lenchik1
зависает при вводе слов
|
Что вполне естественно. Потому что Вы не разобрались в разнице между read и readln, а также write и writeln, и ставите эти операторы, как ни попадя. Конкретно:
1. У Вас:
Код:
Writeln('введи кол-во слов в кодировочной книге');
read(n);
Так нельзя. При вводе с консоли одиночного числа, строки или символа следует использовать ТОЛЬКО readln. Это - некая тонкость, которую просто необходимо знать. Я бы предложил так:
Код:
Write('введи кол-во слов в кодировочной книге ');
readln(n);
2. Аналогично, вместо
Код:
write('введи ',n,' слов');
следует написать
Код:
writeln('введи ',n,' слов');
Зачем же прилеплять первое вводимое слово к выведенному на экран указанию?
3. Но это всё "цветочки", а вот дальше пошли "ягодки".
Код:
k:=0;
repeat
Readln(s);
Write(f,s);
k:=k+1;
until k=n;
Сразу возникает вопрос - зачем тут вообще цикл repeat-until, почему не обойтись обычным for k:=1 to n do? Впрочем, это не главное. При такой записи в файл все вводимые слова сольются воедино, без пробелов между ними. А потому нужно либо писать Writeln(f,s); (тогда каждое слово займет свою отдельную строку), либо Write(f,s+' '); (тогда слова разделятся пробелами).
4.
Не пойдёт! Для того, чтобы ранее открытый на запись файл открыть на чтение, его необходимо предварительно закрыть. То есть так:
5. Продолжение - в том же духе.
Код:
while not eof(f) do
begin
read(f,s);
write(s,' ');
end;
Close(f);
Так можно, если
а) Каждое слово в файле располагается на своей отдельной строке.
б) Вместо read(f,s); поставить readln(f,s);
Если же слова в файле идут просто через пробел, то нужно организовывать довольно сложную процедуру посимвольного считывания до пробела - пропуск пробела - следующее считывание и т.д. Между прочим, использование оператора read для считывания строковой переменной вообще недопустимо. Никогда и нигде. Только readln.
Вот Вам для начала. Размышляйте, исправляйте.