昨天我做了一个计算器,点击检查代码健康按钮,发现由于设计过时,我的健康状况有 64%。我阅读了官方文档并重写了代码。现在代码的健康度显示为134%,但是当输入符号时,重新启动程序后,检查正确输入符号的功能将重新启动两次,然后您可以再次使用该程序。这是输出:
Введите знак(/,*,+,-): *
Введите первое число: 1
Введите второе число: 2
Ответ: 2
Введите знак(/,*,+,-): Вы используете несуществующий символ для вычисления!
Введите знак(/,*,+,-): Вы используете несуществующий символ для вычисления!
Введите знак(/,*,+,-):
更新的代码:
{program calculator;}
label restart;
begin
var rest: integer;
restart: rest := 0;
while rest <> 1 do
begin
var sign := ReadChar('Введите знак(/,*,+,-):');
if (sign <> '-') and (sign <> '+') and (sign <> '/') and (sign <> '*') then begin
writeln('Вы используете несуществующий символ для вычисления!');
goto restart;
end;
var a := ReadInteger('Введите первое число: ');
var b := ReadInteger('Введите второе число: ');
if sign = '+' then begin
writeln('Ответ: ', a + b);
end;
if sign = '-' then begin
writeln('Ответ: ', a - b);
end;
if sign = '/' then begin
if b <> 0 then begin
writeln('Ответ: ', a / b);
end
else
writeln('Нельзя делить на 0!');
goto restart;
end;
if sign = '*' then begin
writeln('Ответ: ', a * b);
end;
end;
end.
事实上,该函数
ReadChar()将用户输入的所有字符作为输入,包括 Enter,它由两个字符 CrLf(回车 + 换行)组成 - 这是两个字符的组合:回车和换行。它们用于 Windows 和 DOS 系统。回车符将光标返回到行首,换行符将光标移动到新行。如果稍微更改无效字符消息的输出行:
然后你就可以检查它。
这该如何处理呢?
ReadChar()经过对,的多次实验后ReadLn(),ReadlnChar()我得到的印象是 PascalABC 不适合循环中的数据输入(或者我的 IDE 实现是这样的),因为键盘输入缓冲区在下一次输入之前不会被清除,并且至少会跳过 CrLf那里。可能有一些函数/过程可以在下一次输入之前清除键盘输入缓冲区,但我还没有找到。
我做了一个或多或少稳定的(对我来说)工作选择: