8

我只是想知道如何在帕斯卡中进行类型检查?我现在已经搜索了几个小时,但我找不到任何有用的东西。

例子:

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.
4

5 回答 5

6

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

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

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

于 2012-04-07T11:48:09.983 回答
2

也许Val程序可以帮助你。这是fpc的一个。但是将您的逻辑更改为读入 aString并使用Val. 你可以在这里找到一个样本。

于 2012-04-07T05:43:18.283 回答
1

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

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

于 2012-06-01T15:18:44.393 回答
0

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

于 2012-04-07T05:49:48.187 回答
0

直接使用 frac(n)

程序int_check;使用crt;var n:真实的;开始 clrscr;write('输入一个数字:');readln(n); if frac(n)=0 then write('Integer!') else write('Not an Integer!'); 读入;结尾。

于 2014-10-24T07:31:31.550 回答