![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#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' и ждала ввода, а не срывалась на бесконечный вывод. Как такое можно сделать? Подскажите, пожалуйста. |
![]() |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,367
|
![]()
А что за версия языка?
В какой части программы обрабатываются параметры командной строки? Т.е., если Код:
а тогда что это? Код:
Как-то так, ...
Как-то так, ...
|
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 13.12.2012
Сообщений: 116
|
![]()
обычный паскаль
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,367
|
![]()
readln(strin);
ReadLn(con,answer); --------^ Собственно для понимания этого и был вопрос. Как-то так, ...
Как-то так, ...
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Связь через командную строку | 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 |