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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2014, 22:19   #1
Решетова Алена
Форумчанин
 
Регистрация: 13.12.2012
Сообщений: 116
По умолчанию Цикл в цикле, зацикливание, запуск программы через командную строку

Здравствуйте. Такая схема:

var strin: AnsiString;
answer: string;
BEGIN
while not eof do
begin
readln(strin);
//куча кода
repeat
Writeln('Введите свой ответ: yes/no');
Readln(answer);
until ((answer='yes') or (answer='no'));
//куча кода
end;
END.

Или вместо repeat until использовать:
while ((answer<>'yes') and (answer<>'no')) do
begin
Writeln('Введите свой ответ: yes/no');
Readln(answer);
end;

Вопрос: почему при запуске ехе'шника и обычного ввода с клавиатуры строки всё нормально, т.е. программа выводит 'Введите свой ответ: yes/no' и ждет ввода значения, если это не yes и не no, то предложение повторяется, пока не будет введено или yes или no. НО, когда через командную строку запускать и подавать на вход программе файл, будь он с одной строкой, с двумя или с множеством строк, предложение 'Введите свой ответ: yes/no' зацикливается, не ожидая ввода?
Ведь программа выполняется построчно, пока весь файл не будет прочитан. Мне нужно, чтобы на выполнении определенной строки, программа выводила это предложение 'Введите свой ответ: yes/no' и ждала ввода, а не срывалась на бесконечный вывод.
Как такое можно сделать? Подскажите, пожалуйста.
Решетова Алена вне форума Ответить с цитированием
Старый 20.03.2014, 22:30   #2
Решетова Алена
Форумчанин
 
Регистрация: 13.12.2012
Сообщений: 116
По умолчанию

Ответ уже получила. Может кому-то понадобится.

Речь о
file.exe < file.txt
Подавая на вход программе файл, стандартный поток ввода (файловая переменная input, из которой читает Read[Ln], когда файловая переменная не указана явно) связывается с этим файлом, ввода с клавиатуры не производится, только из этого файла. Именно там должны быть ответы на все задаваемые вопросы для такого случая.

Можно открывайть файл из программы, если нужно сохранить ввод с клавиатуры.
Другой вариант -- чтобы что-то читать с клавиатуры, использовать отдельную переменную типа 'text':

var con: text;
...
Assign(con,''); Reset(con);
...
ReadLn(con,answer);

Если не сработает при перенаправлении, можно попробовать указать имя консоли явно в Assign(con,'con'); (непереносимо между Windows/Linux).

Ответил bormant с CyberForum
Решетова Алена вне форума Ответить с цитированием
Старый 20.03.2014, 22:34   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

А что за версия языка?
В какой части программы обрабатываются параметры командной строки?
Т.е., если
Код:
readln(strin);
- то это чтение из файла?
а тогда что это?
Код:
Readln(answer);
- чтение с клавиатуры?


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 20.03.2014, 22:40   #4
Решетова Алена
Форумчанин
 
Регистрация: 13.12.2012
Сообщений: 116
По умолчанию

Ну.. мне так и надо было, что readln(strin) - чтение строки из файла, а readln(answer) - ответ с клавиатуры и после завершения всех работ с одной строкой, переход к следующей строке и так, пока файл не закончится.

В общем, мне помогло

var strin: AnsiString;
answer: string;
con: text;
BEGIN
Assign(con,'con');
Reset(con);
while not eof do
begin
readln(strin);
//куча кода
repeat
Writeln('Введите свой ответ: yes/no');
ReadLn(con,answer);
until ((answer='yes') or (answer='no'));
//куча кода
end;
END.
Решетова Алена вне форума Ответить с цитированием
Старый 20.03.2014, 22:41   #5
Решетова Алена
Форумчанин
 
Регистрация: 13.12.2012
Сообщений: 116
По умолчанию

обычный паскаль
Решетова Алена вне форума Ответить с цитированием
Старый 20.03.2014, 23:04   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

readln(strin);

ReadLn(con,answer);
--------^
Собственно для понимания этого и был вопрос.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь через командную строку Darkseed3000 Общие вопросы Delphi 18 19.11.2012 12:06
Регистрация com-объекта через командную строку Riota Компоненты Delphi 11 19.07.2012 12:37
Через командную строку передать два слова и целое число N. gas777 Общие вопросы C/C++ 5 23.06.2011 19:59
Отправка почты из Excel через командную строку zao Microsoft Office Excel 3 06.08.2010 12:10
Передача хэндла через командную строку MaTBeu Win Api 9 29.11.2008 15:30