键入检查Pascal

时间:2012-04-07 05:32:47

标签: 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.

5 个答案:

答案 0 :(得分:3)

您实际上正在进行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');

注意:典型的答案通常是“只读一个字符串并自己进行转换”,但是如果不对终端类型做出假设就很难做到这一点。

对于那些只需要经过验证的输入的清晰简单的程序,上面的技巧(以及在错误时重复的循环)就足够了。

答案 1 :(得分:2)

也许Val程序可以帮到你。对于fpc,这是one。但是,请将您的逻辑更改为String并使用Val进行验证。您可以找到示例here

答案 2 :(得分:0)

由于numberInteger,如果用户键入非数字值,应用程序将失败。你永远不会达到if声明。

答案 3 :(得分:0)

这太简单了,请看下面的代码:

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,并且适合你的形式!

答案 4 :(得分:0)

直接使用frac(n)

  

program int_check;使用crt; var n:real;开始        clrscr;        写('输入数字:'); readln(n);        如果frac(n)= 0则写('整数!')否则写('不是整数!');        readln;端。