Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Zdravím
Potřeboval bych poradit s nalezením chyby v algoritmu.
program zaci_H; type student = record jmeno:string; narozen:integer; znamky:array [1..5] of byte; end; var Fkniha:file of student; trida:array [1..30] of student; zak:student; konec:boolean; i,j,k:integer; begin assign(Fkniha,'studenti.dat'); rewrite(Fkniha); konec:=false; repeat i+=1; writeln('Zadejte jmeno: [ENTER - konec vstupu]'); readln(trida[i].jmeno); if trida[i].jmeno <>'' then begin writeln('Zadejte rok narozeni: '); read(trida[i].narozen); for j:=1 to 5 do begin writeln('Zadejte znamku: '); read(trida[i].znamky[j]); end; end else konec:=true; write(Fkniha,trida[i]); until konec; close(Fkniha); writeln; reset (Fkniha); while not (eof(Fkniha)) do begin read(Fkniha,zak); if zak.jmeno<>'' then begin writeln('Jmeno: ',zak.jmeno); writeln('Narozen: ',zak.narozen); write('Znamky: '); for k:=1 to 5 do write(zak.znamky[k],' '); writeln; end; end; close(Fkniha); readln;readln; end.
Program má načítat studenty, dokud při zadávání jména nezadáme žádnou hodnotu. Místo toho načte pouze jednoho studenta, u druhého ještě vypíše 'Zadejte jmeno...', ale potom hned skočí na výpis. Nemůžu se dopátrat kde je chyba.
Děkuji
Offline
OK, asi teda inicializuje.
No každopádně. Oprášil jsem Pascal a zkompiloval jsem si to. Pro načítání těch čísel používáš read(), což nepřečte enter. Dalšímu read() -- zdá se -- tohle nijak nevadí a čeká na zadání čísla, ale jakmile přijde první readln(), což je ve druhé interaci, hned celý readln() skončí jakoby uživatel na klávesnici zadal hned enter.
Místo obou výskytů read() použij readln().
Offline
Děkuji. Stále mi sice není přesně jasné, proč můj postup nefunguje, každopádně s readln vše funguje tak jak má.
Pochopil jsem to tak, že ten enter tam vlastně zůstal z předchozího zadávání a přečetl se až při readln...
Offline
Ano, enter tam zustal z predchoziho zadavani. Je jen otazkou, proc jej nezkonzumuje nasledujici read() a neskonci tak s chybou, protoze enter neni cislo. To bude nejaka pascalovska specialita. Kdyz totiz v zadani cisla zadas treba pismeno, konci cely program s chybou.
Offline
Stránky: 1