Błąd wczytywanie w typie char.

0

Tym razem kompilator pięknie przeszedł przez moduł tylko tym razem problem dotyczy wczytywania danych. Procedura arepeat miała służyć do powtarzania programu. Z nie wyjaśnionych przyczyn program nie reaguje na readln(znak); po wcześniejszej deklaracji w zmiennych lokalnych.
Oto kod.


program ala_ma_kota;
uses crt,rekurencja;

procedure powitanie(var a:integer);
begin
writeln('Wybierz opcje');
writeln('1 - Silnia');
writeln('2 - Fibonacci');
writeln('3 - NWD (odejmowanie)');
writeln('4 - NWD (dzielenie)');
writeln('Opcja numer: '); read(a);
end;

procedure acase(z:integer);
var a,b:integer;
begin
case z of
1:
begin
writeln('Podaj liczbe '); read(a);
writeln('Silnia z liczby ',a,' wynosi ',silniar(a));
end;
2:
begin
writeln('Podaj liczbe '); read(a);
writeln('Wyraz ciagu ',a,' wynosi: ',fibonacci(a));
end;
3:
begin
writeln('Podaj pierwsza liczbe: '); read(a);
writeln('Podaj druga liczbe: '); read(b);
writeln('Najwiekszy wspolny dzielnik z ',a,' i ',b,' wynosi: ',nwddodawanie(a,b));
end;
4:
begin
writeln('Podaj pierwsza liczbe: '); read(a);
writeln('Podaj druga liczbe: '); read(b);
writeln('Najwiekszy wspolny dzielnik z ',a,' i ',b,' wynosi: ',nwddzielenie(a,b));
end;
Else writeln('Bledna opcja.');
end;
end;

procedure wszystko;
var z:integer;
begin
powitanie(z);
acase(z);
end;

procedure arepeat;
var znak:char;
begin
repeat
clrscr;
wszystko;
Delay(5000);
writeln('Czy chcesz powtorzyc program ? (T/N)');
readln(znak);
Until UpCase(znak)='N';
writeln('Koniec programu.');
end;

begin
arepeat;
end.

Za pomoc dziękuje.

1
luke18dg napisał(a)

Z nie wyjaśnionych przyczyn program nie reaguje na readln(znak)

Program zapewne reaguje na instrukcję Readln, ale w tym przypadku powinieneś użyć Readkey

  ...
  Write('Czy chcesz powtorzyc program? (T/N) ');
  znak:= Readkey;
until UpCase(znak) = 'N';

Jeszcze uwaga do procedury powitanie. Nigdy nie używaj instrukcji Read(zmienna) do wczytywania danych z klawiatury. Zawsze Readln(Zmienna). Przy Read po wczytaniu w buforze klawiatury pozostaje naciśnięty wcześniej "Enter" i program zachowuje się nie tak jak powinien (widziałem już niejeden post, gdzie pytający używał w kodzie Read i nie mógł dojść do tego, dlaczego program się źle wykonuje)

0

Dziękuje za pomoc. Wystarczyło tylko dopisać ln do każde read.

1 użytkowników online, w tym zalogowanych: 0, gości: 1