Pascal中的类型检查
我只是想知道如何用pascal进行类型检查?我已经找了好几个小时了,但没有找到任何有用的东西 例如:Pascal中的类型检查,pascal,fpc,Pascal,Fpc,我只是想知道如何用pascal进行类型检查?我已经找了好几个小时了,但没有找到任何有用的东西 例如: var number: Integer; begin write('Enter a number: '); read(number); if {How am I supposed to check if 'number' is an Integer here?} then writeln(number) else writeln('Invalid input') end
var
number: Integer;
begin
write('Enter a number: ');
read(number);
if {How am I supposed to check if 'number' is an Integer here?}
then writeln(number)
else writeln('Invalid input')
end.
也许手术可以帮你。这是给fpc的。但将逻辑更改为读入
字符串
,并使用Val
对其进行验证。你可以找到一个样品 由于数字
是一个整数
,如果用户键入非数值,应用程序将失败。如果语句,您将永远无法访问。您实际上正在进行I/O类型检查。您可以通过暂时禁用它,然后检查结果来解决此问题:
{$I-} //turn off IO checking temporarily
read(i);
{$I+} // and back on
if ioresult=0 then // check the result of the last IO operation
writeln('integer successfully read:',number)
else
writeln('invalid input');
注意:典型的答案通常是“只需读取字符串,然后自己进行转换”,但是如果不假设终端类型,很难很好地完成转换
对于只需要经过验证的输入的清晰而简单的程序,上面的技巧(以及在出错时重复的循环)就足够了。这太容易了,请参阅下面的代码:
program int_check;
uses crt;
var n:real;
begin
clrscr;
write('Enter a number: ');readln(n);
if n-round(n)=0 then write('Integer!') else write('Not an Integer!');
readln;
end.
你看,没有字符串,没有IOcheck
,符合你的格式 直接使用frac(n)
程序内部检查;使用阴极射线管;var n:真实;开始
clrsc;
写('输入一个数字:');readln(n);
如果frac(n)=0,则写入('Integer!'),否则写入('nota Integer!');
readln;结束
这不一定是真的。这取决于IO检查的状态,不可否认,在大多数编译器中,默认情况下,IO检查是打开的+1投票是为了意识到拼图的某些部分缺失,应该有一种检查IO错误的方法。