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用ですただし、ロジックを変更してaに読み込み、Stringを使用して検証し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

numberはであるためInteger、ユーザーが数値以外の値を入力するとアプリは失敗します。あなたはif声明に達することは決してないだろう。

于 2012-04-07T05:49:48.187 に答える
0

frac(n)を直接使用する

プログラムint_check; crtを使用します。var n:real; clrscrを開始します。write('数値を入力してください:'); readln(n); frac(n)= 0の場合はwrite('Integer!')else write('Not a Integer!'); readln; 終わり。

于 2014-10-24T07:31:31.550 に答える