Pascalban hogy kell ilyen hibakódot írni?
program kitalalos;
uses
crt, sysutils;
var
x,y,p:integer;
begin
randomize;
y:=random(1000)+1;
write('Gondoltam egy számra 0 és 1000 között. Melyik az a szám?');
repeat
read(x);
if x<0 then writeln('A szám 0 és 1000 között van')
else if x>1000 then writeln('A szám 0 és 1000 között van')
else if x<y then writeln('A szám amire gondoltam nagyobb.')
else if x>y then writeln('A szám amire gondoltam kisebb.');
inc(p);
until x=y;
writeln('Gratulálok, ',p,'. próbálkozásra sikerült kitalálnod!');
readkey;
end.
H elindítom és beírok egy betűt akkor crashel. Hogy kell rá írni valamilyen hibaüzenetet? Próbálkoztam már a string átalakítással azért van benne a sysutils de nem jutottam messze. A lényeg az lenne ha stringet érzékel a program akkor írja ki hogy szám kell nem betű.
Például:
Olvass be String-be, vizsgáld meg, hogy csak számból áll-e. Ha nem, akkor hibaüzi.
(Biztos van ennél szebb megoldás is, rég Pasvaloztam.)
Használj try-except blokkot.
program kitalalos;
{$mode objfpc}
uses sysutils;
var
s : string;
i : integer;
begin
write('input: ');
readln(s);
try
i := StrToInt(s);
except
on E : EConvertError do HIBA ESETEN FUTTATANDO PARANCSOK;
end;
end.
Szerintem röviden ennyi:
uses Crt;
var x, y, p, hiba:integer;
s : string;
begin
Randomize;
y := Random(1001);
p := 1;
ClrScr;
Write('Gondoltam egy számra 0 és 1000 között. Melyik az a szám?', #10#13);
repeat
hiba := 1;
while hiba <> 0 do
begin
Write('Kérem a(z)', p, '.számot: ');
ReadLn(s);
Val(s, x, hiba);
if hiba <> 0 then WriteLn('Hibas szám !');
end;
if x < 0 then WriteLn('A szám 0 és 1000 között van')
else if x > 1000 then WriteLn('A szám 0 és 1000 között van')
else if x<y then writeln('A szám amire gondoltam nagyobb.')
else if x>y then writeln('A szám amire gondoltam kisebb.');
Inc(p);
until x = y;
WriteLn('Gratulálok, ',p - 1,'. próbálkozásra sikerült kitalálnod!');
ReadKey;
end.
...és ezt:
if x < 0 then WriteLn('A szám 0 és 1000 között van')
else if x > 1000 then WriteLn('A szám 0 és 1000 között van')
cseréld ki erre:
if (x < 0) or (x > 1000) then WriteLn('A szám 0 és 1000 között van')
valamint tanulj meg 'szép' kódot írni. Bár a Pascal nem érzékeny a kis és nagybetűkre, de szerintem az én kódom szebb :) - igaz én még az 5.5-ös Turbo Pascal-t tanultam anno, betűről betűre, ha érted -.
Ilyen hibakezelést lehet az "ioresult" figyelésével is csinálni, tehát readln előtt a {$i-} direktíva beírása, utána pedig ha ioresult=0 akkor engedi tovább a repeat-until ciklus, egyébként azt írja ki, hogy "számot írj be!"
Ez csak egy tipp, hogy így is lehet.
Régen így csináltam.
Hát, úgy tűnik, a fentebb vázolt SimkoL általi megoldás a nyerő, megpróbáltam megírni az "IOResult"-os megoldással, nem működik, pedig tényleg rémlik, hogy 15 éve egyszer ezzel oldottam meg egy ilyen problematikát. :-)
Az elágazásokat viszont leegyszerűsítettem egy case elágazásra, nem tudom mennyire elegáns megoldás.
uses Crt;
var x, y, p, hiba:integer;
s : string;
begin
Randomize;
y := Random(1001);
p := 1;
ClrScr;
Write('Gondoltam egy számra 0 és 1000 között. Melyik az a szám?', #10#13);
repeat
repeat
Write('Kérem a(z)', p, '.számot: ');
{$I-}
ReadLn(x);
{$I+}
if IOResult <> 0 then
WriteLn('Hibas szám !');
until(IOResult=0);
case x of
0..1000: WriteLn('A szám 0 és 1000 között van');
1001..32767: WriteLn('A szám 1001 és 32767 között van');
end;
If x<y then writeln('A szám amire gondoltam nagyobb.');
if x>y then writeln('A szám amire gondoltam kisebb.');
Inc(p);
until x = y;
WriteLn('Gratulálok, ',p - 1,'. próbálkozásra sikerült kitalálnod!');
ReadKey;
end.
Úgy tűnik, mégis megtaláltam a megoldást. :-)
uses Crt;
var x, y, p, hiba:integer;
s : string;
begin
Randomize;
y := Random(1001);
p := 1;
ClrScr;
Write('Gondoltam egy számra 0 és 1000 között. Melyik az a szám?', #10#13);
repeat
repeat
Write('Kérem a(z)', p, '.számot: ');
hiba:=1;
{$I-}
ReadLn(x);
{$I+}
if IOResult <> 0 then
WriteLn('Hibas szám !')
Else hiba:=0;
Until(hiba=0);
Case x of
0..1000: WriteLn('A szám 0 és 1000 között van');
1001..32767: WriteLn('A szám 0 és 1000 között van');
end;
If x<y then writeln('A szám amire gondoltam nagyobb.');
if x>y then writeln('A szám amire gondoltam kisebb.');
Inc(p);
until x = y;
WriteLn('Gratulálok, ',p - 1,'. próbálkozásra sikerült kitalálnod!');
ReadKey;
end.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!