Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Получение ответов вида y\n

Автор: habi 16.05.2008 0:35

Как лучше реализовать? =)
Если пользователь ввёл y, то условие тру, если n то фалс..

Задача: сделать защиту от "дурака".
Тип переменной ans, в которую передаётся нажатие пользователем клавишь, char.

Пробывал сделать через вайл, но почему-то не обнуляется потом переменная ans


while (ans='y') or (ans='n') do
begin
if .... then ... else...
end;



Так же сделал, через отдельную функцию, которая выводила окно, с 3 кнопками, да\нет\отмена =) но задание курсовой не позволяет ввести такое окно.
Так как же проверять значение лучше? :]

Автор: compiler 16.05.2008 0:53

ты это имел ввиду?

uses crt;

function q: boolean;
var ch : char;
begin
repeat ch:= readkey; until ch in ['y', 'n'];
if ch = 'y'
then begin writeln('yes'); q:=true; end
else begin writeln('no'); q:=false; end;
end;

Автор: habi 16.05.2008 1:03

Нет, а если пользователь введёт u, промахнётся, то что? =)
Нужно жёстко зациклить этот вопрос, пока не будет верного ответа.

Автор: volvo 16.05.2008 1:09

Цитата
Нет, а если пользователь введёт u, промахнётся, то что? =)
Ну, попробуй, введи... Что будет? smile.gif

Автор: habi 16.05.2008 1:13

будет ноу, а у меня при всех введёных буквах, кроме у, идёт выполнение операции.
Если я хотел выполнить её, но промахнулся..нажал ентер, всё =)
Это проверка стоит, на кнопке выход и некоторых других.
Теперь понятная суть?

Для считывания имён файлов, я сделал конструкцию вида

Код

fail:='';      {переменная  типа string}
       while fail='' do
       begin
       writeln('Введите имя файла:');
       readln(fail);
       end;
       ...
       дальше идёт работа с файлом, если его имя заполнено, в этой процедуре, этого хватает


Вопрос: можно ли не меняя типа переменной обнулять переменные с типом char? :]

Автор: compiler 16.05.2008 1:35

Цитата(habi @ 15.05.2008 21:13) *
Теперь понятная суть?
нет, так
function q2: boolean;
var str : string;
begin
readln(str);
if str='yes' then q2:=true else q2:=false;
end; { q2 }
Цитата(habi @ 15.05.2008 21:13) *
Вопрос: можно ли не меняя типа переменной обнулять переменные с типом char? :]
ну.. под обнулением целых чисел подразумевается предание им определённого значения... присваивай своим переменным пробел..

Автор: volvo 16.05.2008 1:40

Цитата
будет ноу
Не будет, пока ты не нажмешь "y" или "n", программа не выйдет из цикла...

Автор: habi 16.05.2008 1:47

=)
не увидел антил..спасибо за алгоритм :]
Спасибо.

Проблема была в обнуление, присвоил ans пробел, и всё окей =)как в первом варианте.

Автор: andriano 16.05.2008 2:45

Цитата(compiler @ 15.05.2008 21:53) *

ты это имел ввиду?
uses crt;

function q: boolean;
var ch : char;
begin
repeat ch:= readkey; until ch in ['y', 'n'];
if ch = 'y'
then begin writeln('yes'); q:=true; end
else begin writeln('no'); q:=false; end;
end;


По правилам хорошего тона:

repeat ch:= readkey; until ch in ['y', 'Y', 'д', 'Д', 'n', 'N', 'н', 'Н'];
if ch in ['y', 'Y', 'д', 'Д'] then ...
else if ch in ['n', 'N', 'н', 'Н'] then ...