Pertanyaan Ketik Memeriksa Di Pascal


Saya hanya bertanya-tanya bagaimana mungkin untuk melakukan pengecekan jenis dalam pascal? Saya telah mencari berjam-jam sekarang tetapi saya belum bisa menemukan sesuatu yang bermanfaat.

Contoh:

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
2018-04-07 05:32


asal


Jawaban:


Anda benar-benar memukul pemeriksaan jenis I / O. Anda dapat mengatasi ini dengan menonaktifkannya sementara dan kemudian memeriksa hasilnya:

 {$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');

Catatan: jawaban umumnya sering "hanya membaca string dan melakukan konversi sendiri", namun sulit untuk melakukannya dengan baik tanpa membuat asumsi tentang jenis terminal.

Untuk program yang jelas dan sederhana di mana Anda hanya ingin masukan yang agak divalidasi, trik di atas (dan lingkaran di sekitarnya yang berulang pada kesalahan) sudah cukup.


3
2018-04-07 11:48



Mungkin Val prosedur dapat membantu Anda. Disini adalah satu untuk fpc. Tetapi ubah logika Anda untuk dibaca menjadi String dan memvalidasi menggunakan Val. Anda dapat menemukan sampel sini.


2
2018-04-07 05:43



Sejak number adalah Integer, aplikasi akan gagal jika pengguna mengetik nilai non-numerik. Anda tidak akan pernah mencapai if pernyataan.


0
2018-04-07 05:49



Gunakan frac (n) secara langsung

int_check program; menggunakan crt; var n: real; mulai        clrscr;        tulis ('Masukkan nomor:'); readln (n);        jika frac (n) = 0 maka tulis ('Integer!') menulis lain ('Bukan Integer!');        readln; akhir.


0
2017-10-24 07:31



Itu terlalu mudah, lihat kode saya di bawah ini:

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.

Anda lihat, tidak ada tali, tidak IOcheck, dan sesuai dengan bentuk Anda!


-1
2018-06-01 15:18