PLIKI w petli while not EoF

0

Mam problem w programiku:

 
program ObliczSredniaZOcen;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;


var
  petlawyjscie : byte;
  wybortryb, wyborlol : byte;
  iloscocen : Integer;
  ocena, sumaocen : Integer;
  sredniazocen : Extended;
  i, n : byte;
  TF : TextFile;
begin
petlawyjscie := 0;

While petlawyjscie < 1 do
begin
sumaocen := 0;
n := 0;
Writeln('Wybierz sposob wprowadzenia ocen/opcje:');
Writeln(' 1)Reczne wprowadzenie przez uzytkownika');
Writeln(' 2)Wczytanie ocen oddzielonych spacjami z pliku tekstowego');
Writeln(' Nazwa Pliku: "Oceny.txt" ');
Writeln(' 3)Wyjdz z programu');
Readln(wybortryb);
If wybortryb <> 1 then
  begin
  If wybortryb <> 2 then
    begin
    If wybortryb <> 3 then
      begin
      Writeln('Wprowadzono bledne dane!');
      Writeln('Wcisnij [ENTER] aby kontynuowac!');
      Readln;
      end;
    end;
  end;
If wybortryb = 3 then
  begin
  petlawyjscie := 1;
  end;
If wybortryb = 1 then
  begin
  Writeln('Podaj ilosc ocen');
  Readln(iloscocen);
   For i := 1 to iloscocen do
    begin
    n := n+1;
    Writeln('Podaj ocene z przedmiotu nr ', n);
    Read(ocena);
    sumaocen := sumaocen+ocena;
    end;
  sredniazocen := sumaocen/iloscocen;
  Writeln('Srednia z ocen wynosi: ', sredniazocen);
  Writeln('Zaokraglona srednia z ocen wynosi: ', sredniazocen:0);
  Writeln('Bardziej zaokraglona srednia z ocen wynosi: ', sredniazocen:0:0);
  Writeln('Wcisnij [ENTER] aby kontynuowac');
  Readln;
  end;
If wybortryb = 2 then
  begin
  Writeln('Podaj nr. wersji, zgodnie z ktora zapisany jest plik "Oceny.txt":');
  Writeln('1) Wersja 1:');
  Writeln('   1. linia - Ilosc ocen');
  Writeln('   2. Linia - Oceny oddzielone spacjami');
  Writeln('2) Wersja 2:');
  Writeln('   1. Linia - Oceny oddzielone spacjami');
  Readln(wyborlol);
  If wyborlol <> 1 then
  begin
    If wyborlol <> 2 then
    begin
      Writeln('Wprowadzono bledne dane!');
      Writeln('Wcisnij [ENTER] aby kontynuowac!');
      Readln;
    end;
  end;
  AssignFile(TF, 'Oceny.txt');
  If not FileExists('Oceny.txt') then
    begin
    Writeln('Plik nie istnieje!');
    Readln;
    end;
  If FileExists('Oceny.txt') then
begin
  Reset(TF);
  If wyborlol = 1 then
    begin
    Readln(TF, iloscocen);
    For i := 1 to iloscocen do
      begin
      Read(TF, ocena);
      sumaocen := sumaocen+ocena;
      end;
    CloseFile(TF);
    sredniazocen := sumaocen/iloscocen;
    Writeln('Srednia z ocen wynosi: ', sredniazocen);
    Writeln('Zaokraglona srednia z ocen wynosi: ', sredniazocen:0);
    Writeln('Bardziej zaokraglona srednia z ocen wynosi: ', sredniazocen:0:0);
    end;
  If wyborlol = 2 then
  begin
  sumaocen := 0;
  iloscocen := 0;
    While not EoF(TF) do
    begin
      Read(TF, ocena); // O TU <-- <-- <-- <-- <-- Jakby ignoruje to TF, wczytuje do zmiennej ocena z klawiatury i przesuwa kursor w pliku(bo kończy wczytywać po wprowadzeniu identycznej ilości ocen jak w pliku).
      sumaocen := sumaocen+ocena;
      iloscocen := iloscocen+1;
    end;
  sredniazocen := sumaocen/iloscocen;
  Writeln('Srednia z ocen wynosi: ', sredniazocen);
  Writeln('Zaokraglona srednia z ocen wynosi: ', sredniazocen:0);
  Writeln('Bardziej zaokraglona srednia z ocen wynosi: ', sredniazocen:0:0);
  end;
end;
  Writeln('Wcisnij [ENTER] aby kontynuowac');
  Readln;
  end; // koniec wybortryb = 2
end // koniec petla while petlawyjscie
end.

W miejscu Read(TF, ocena) w petli while not EoF program przy wykonywaniu zamiast odczytywać z pliku TF, odczytuje dane z klawiatury. Dlaczego i jak to naprawić? Z góry dzięki za pomoc.

EDIT. Przy okazji: próbowałem zrobić tak, aby najpierw była wczytywana z klawiatury do stringa lokalizacja pliku z klawiatury, ale nie bardo kompilator zgadzał się z moją wizją otworzenia pliku AssignFile(TF, stringzlokalizacja);

1

Twój kod jest sformatowany "tak sobie" i nie chce mi się analizowac, ale skoro i tak nie zależy Tobie na tym aby exek wynikowy "spuchł", bo masz w uses SysUtils, to dodaj moduł Classes i użyj obiektu TStringList. Do niego ładuj plik oraz zapisuj. Na pierwszy rzut oka tutaj w przypisaniu pliku i obsłudze nie widze problemu, może ktoś inny dostrzerze to Tobie napisze co jest nie tak, ja polecam użyć TStringList, jeśli sobie z typem TextFile nie radzisz.

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