Конечно, происходит сбой, если вы набираете письмо ... вы специально просите прочитать целое число, а письмо не является целым числом.
Прежде чем комментировать этот вопрос, почему бы и нетпросто скажите:
writeln ('Please enter the number rolled, or 0 if it is an OUT: ');
вместо 6 писем?Кроме того, что, если выпало 3 или 5 (вы только указываете (несколько странно) указания для значений 1, 2, 4, 6 и 0 ... опуская 3 и 5. Имейте в виду, что вы можете 't получить 0 от "BowlDieResult: = Random (6) + 1".
Как вы хотите, чтобы пользователь указал "стоп", если вы выполняете цикл, пока не получите значение от 1 до 6?
Возвращаясь к вопросу «как читать письмо» ...
Используйте переменную типа «char» (или «упакованный массив символов») для чтения произвольного текста ...затем сравните прочитанный символ с «1», «2», ..., «6» или (скажем) «Q» (для «Выйти»).
Например:
var
answer : char;
attempts : integer; {prevent infinite loop}
done : boolean;
attempts := 0;
saw_quit := false;
done := false; {loop until we get a good number or a QUIT command}
{Or until 9 attempts have been made to enter a #. }
while not done do
begin
writeln ('Please enter a number (1..6) or Q to quit: ');
readln (answer);
if answer in ['1'..'6'] then
begin {we got a number in range 1..6...}
BowlDieResult := ord (answer) - ord ('0'); {convert char to int}
done := true;
end
else if answer in ['Q', 'q'] then {upper or lower case :) }
begin
saw_quit := true;
done := true;
end
else
begin
writeln ('Sorry, that is not a number from 1 to 6 or a "Q"!');
attempts := attempts + 1;
if attempts > 9 then
begin
writeln ('Sorry, too many mistakes ... assuming QUIT');
saw_quit := true;
done := true;
end;
end;
end; {while not done}
Примечание: вышеупомянутое не проверено на компиляцию ... Я НИКОГДА не использую встроенный ввод / вывод Паскаля из соображений производительности и надежности, поэтому я не справился с этим.
Примечание: см. http://www.allegro.com/papers/htpp.html для некоторой философии программирования на Паскале.
Stan