0

特定の変数 x が数字か文字かを判断する (非常に) 小さなコードを作成しようとしています。type(x) のようなものなしで手動で行う必要があります-Pascalにそのようなものがあると仮定します-。

私の計画は、x が数字ではないことを 1 つずつ検証することでした。次に、次のように書きました。

(*let ischar be a boolean and let x be a letter or a number.*)
for i:=0 to 9 do
begin
    if (x=i) then
        ischar = false;
end;

if ischar then
    write('x is a number!');
else
    write('x is a letter');

x が文字の場合、テスト "x=i" が false を返すことを期待していましたが、ここでは次のエラーのためにコンパイルすることさえできません: "Got char, expected long int". x と i を比較できないようですが、それはわかっていましたが、その状況下で false を返すと思いました。これを「手で」行う別の方法はありますか?

4

1 に答える 1

4

通常、異なる型の変数を直接比較することはできません。コンパイル エラーはx、 が として宣言されていることを示唆していますがcharilongintです。

使用可能なオプションは、使用する Pascal コンパイラによって異なります。
私の唯一の経験は、Borland (後の CodeGear と Embarcadero) 製品の "Turbo Pascal" と "Delphi" です。

これらのコンパイラにはord、序数型の数値を与える関数があります。の場合charord関数は文字の ASCII コードを提供する必要があります。これをテストして、コード範囲が '0'..'9' であるかどうかを確認できます。

forループは必要ありません。これはうまくいくはずです:

if (ord(x)<48) or (ord(x)>57) then ischar:=true else ischar:=false;

ord編集:関数の Free Pascal ドキュメントは次のとおりです:
http://www.freepascal.org/docs-html/rtl/system/ord.html

于 2013-09-20T01:15:44.940 に答える