Adibidez, aurreko readln(iZenbakia)instrukzioarako -12.5 ematean puntua ez da onartzen eta programak abortatu egiten du. Arazo bera gertatuko litzateke -2M5 ematean edo +2E5 ematean, batean M karakterea ez delako onartzen eta bestean E karakterea delako onartzen ez dena.
Zenbaki errealekin antzeko zerbait gertatzen da, osoek baino karaktere gehiago onartzen dituzte errealek (adibidez e, E eta puntua) baina karaktere desegoki bat ematean programak abortatu egiten du ere. Esate baterako, aurreko readln(rZenbakia)instrukzioarako ezin daiteke -2.7M5 eman.
Ondoko programa bi hauek zenbakien sarrera zaintzen dute. Horretarako zenbakia string bezala irakurtzen da, gero val prozedura aplikatuz erabakitzen da zer egin sarrera desegokia izan bada.
{-----------------------------------------------------------------
Programa honen bitartez integer datu-motako datuak jasoko ditugu.
-----------------------------------------------------------------}
program IntegerBatIrakurtzenKateBatenBitartez;
uses crt;
type
tsKatea = string[15];
{------------------------Programa Nagusia--------------------}
var
sDatua: tsKatea;
iDatua: integer;
iErrorea: integer;
cAukera: char;
begin
{ Programak behin eta berriro exekutatuko da erabiltzaileak amaitzeko erabakia hartu arte }
repeat
writeln('Programak honek zenbaki oso bat eskatuko du, teklatuz jasotako zenbaki hori');
writeln('string batean gordeko da eta val prozeduraren bitartez integer datu-motakoa');
writeln('den aztertuko da. Kopuru osoa teklatuz sartu ezean prozesua errepikatuko da');
writeln;
repeat
{zenbakia string bezala irakurtzen da, honek ez du sekulan errorerik sortzen}
write('Sar ezazu zenbaki oso bat: ');
readln(sDatua);
{datua den string hori zenbaki bihurtu eta aztertu errorerik gertatu den}
val(sDatua, iDatua, iErrorea);
if iErrorea <> 0 then
begin
writeln('Sarrera onartezina, ', iErrorea, '. posizioko zifra ez da egokia: ', sDatua[iErrorea]);
writeln('berriro errepikatu');
writeln;
end;
until iErrorea = 0;
{datua den string hori zenbaki bihurtu dela frogatzeko bere doble pantailaratu}
writeln('Sartutako datuaren doblea: ', iDatua*2);
writeln;
writeln;
write('Beste zenbakirik? (B ala E): ');
repeat
cAukera := upcase(readkey);
until (cAukera = 'E') or (cAukera = 'B');
clrscr;
until cAukera = 'E';
end. { Programaren amaiera }
{-----------------------------------------------------------------
Programa honen bitartez real datu-motako datuak jasoko ditugu.
-----------------------------------------------------------------}
program RealBatIrakurtzenKateBatenBitartez;
uses crt;
type
tsKatea = string[15];
{------------------------Programa Nagusia--------------------}
var
sDatua: tsKatea;
rDatua: real;
iErrorea: integer;
cAukera: char;
begin
{ Programak behin eta berriro exekutatuko da erabiltzaileak amaitzeko erabakia hartu arte }
repeat
writeln('Programak honek zenbaki bat eskatuko du, teklatuz jasotako zenbaki hori');
writeln('string batean gordeko da eta val prozeduraren bitartez real datu-motakoa');
writeln('den aztertuko da. Zenbaki teklatuz sartu ezean prozesua errepikatuko da');
writeln;
repeat
{zenbakia string bezala irakurtzen da, honek ez du sekulan errorerik sortzen}
write('Sar ezazu zenbaki bat: ');
readln(sDatua);
{datua den string hori zenbaki bihurtu eta aztertu errorerik gertatu den}
val(sDatua, rDatua, iErrorea);
if iErrorea <> 0 then
begin
writeln('Sarrera onartezina, ', iErrorea, '. posizioko zifra ez da egokia: ', sDatua[iErrorea]);
writeln('berriro errepikatu');
writeln;
end;
until iErrorea = 0;
{datua den string hori zenbaki bihurtu dela frogatzeko bere doble pantailaratu}
writeln('Sartutako datuaren doblea: ', rDatua*2:0:3);
writeln;
writeln;
write('Beste zenbakirik? (B ala E): ');
repeat
cAukera := upcase(readkey);
until (cAukera = 'E') or (cAukera = 'B');
clrscr;
until cAukera = 'E';
end. { Programaren amaiera }
iruzkinik ez:
Argitaratu iruzkina