Mi lehet a hiba (Free Pascal fileból olvasás)?
Van egy program, ami beolvas egy fájlból. A fájl maximum 51 soros és csak számokat tartalmaz. A beolvasás után kiírja a képernyőre az összes számot, mindegyiket új sorba mint ahogy a szöveges állományban van. Na itt a probléma a program csak a 28. sortól kezdi a kiírást (valószínű a beolvasást is), és minden futtatásnál a 28. sort (ami az első amit kiír) egyel többször írja ki mint az előző futtatásnál... Nem értem mi lehet a gond.
Forráskód:
program lotto;
uses crt;
const maxn=51;
var be:text;
szamok:array[1..maxn] of integer;
procedure F1();
var i:integer;
begin
assign(be,'C:\Documents and Settings\Laci\Asztal\lottosz.txt');
{$I-}
reset(be);
{$I+}
for i:=1 to maxn do
begin
readln(be,szamok[i]);
end;
close(be);
end;
procedure F2();
var i:integer;
begin
for i:=1 to maxn do
writeln(szamok[i]);
end;
begin
F1();
F2();
repeat until keypressed
end.
A szöveges állomány tartalma:
3742446162
1842548389
512315360
128475670
5456575971
721333986
2129374868
1021294087
1333737778
223657184
321283033
2331427385
423426164
1760667185
1260666772
4650586276
2032436573
5556586171
1838416789
3241596679
2535377486
145606182
720355883
737404651
26477480
15224488
2333347189
456747789
1718515275
729307780
1718283590
624255379
712183890
2528455574
1029607486
724255076
2040525490
1630818387
2022235067
5968758085
3245557078
1340555676
314247383
2325286676
2433343954
1228346170
1486974
415464959
2431677173
1226364649
920215968
Ha valaki tud segíteni ezt nagyon szépen megköszönném.
Egyrészt az integer nem fog tudni ekkora számot kezelni.
Az integer -32000 .. +32000 (a teljesen pontos értéket nem tudom) De a fenti számok tuti nem férnek bele.
És bár régen foglalkoztam Pascallal, de a beolvasás nem stringet kezel és utána kell átalakítani a stringet integeré?
A másik meg, hogy szerintem a fájlolvasó ciklus ne 51-ig menjen, hanem valahogy így (nem biztos, hogy pascalban is így van)
While not eof(be) { //A ciklus addig fut, amíg a fájl végére nem ér.
readln(be,szamok[i]);
}
Na, ezt most jó sokáig néztem, és fogtam a fejem, amikor rájöttem, mi a hiba...
A Pascal képernyője alapvetően 25 soros. Tehát az 51 sor semmiképp nem fog kiférni. Csak a 28-51. sorokat látod majd.
Az F2 ciklusának a végére írd be:
If (i MOD 24)=0 Then
Begin
ReadLn;
Clrscr;
End;
Ennek hatására a képernyő alján megáll a kiírás, vár egy Entert, törli a képernyőt és fut tovább a program.
Az 5-ös lottóba 5 számot húznak ki 1 és 90 között.
A kihúzott számokat tagolva közlik nem egybe egyetlen számba. Mi értelme van egyáltalán??
Pl. 26477480-t hogy döntöd el hogy 2 64 77 4 80 vagy 26 47 74 80 vagy 2 6 4 77 4 80 ?
Mit kéne tudnia a programnak? Ha csak annyit hogy kiírja a konzolablakra a fájl tartalmát akkor parancssorból megoldom 1 sorból: more "C:\Documents and Settings\Laci\Asztal\lottosz.txt"
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!