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

我只是想知道如何用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.

也许手术可以帮你。这是给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错误的方法。