Runtime error 64736 – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Runtime error 64736 – Pascal – Fórum – Programujte.comRuntime error 64736 – Pascal – Fórum – Programujte.com

 

Kalgys0
Návštěvník
23. 1. 2012   #1
-
0
-

Zdravím přátelé,

mám problém s chybou 64736. Dělám program, který umožní registraci(do jednoho souboru) potom vytvoří soubor pro každého zaregistrovaného uživatele. Problém nastává při ověřování přihlašovacího jména ze souboru ůdajů o všech uživatelích.

Nahlásit jako SPAM
IP: 213.155.225.–
Kalgys0
Návštěvník
23. 1. 2012   #2
-
0
-

#1 Kalgys
procedure ss(b:string);

var c:string;
begin
  c:='';
  assign(F,'c:\pokus\udaje.txt');
  reset(F);
  while (c=b) do
  begin
  readln(c);
  end;
  if c<>b then
  begin
  write('Login nenalezen');
  end
  else
  write('Prihlasen');
  close(F);
  end;
procedure log;
var nick,pass,full:string;
begin
  write('Jmeno: ');
  readln(nick);
  write('Heslo: ');
  readln(pass);
  clrscr;
  aa;
  full:=nick+' '+pass;
  assign(F,'c:\pokus\udaje.txt');
  reset(F);
  while not eof(F) do
  ss(full);
  Close(F);
  rep[1]:=false;
end;
procedure reg;
var nick,pass,t,full:string;
   begin
    t:='.txt';
    Write('Jmeno: ');
    read;
    readln(nick);
    write('Heslo: ');
    readln(pass);
    full:='c:\pokus\uzivatele\'+nick+t;
    assign(F,'c:\pokus\udaje.txt');
    append(F);
    writeln(F,nick+' '+pass);
    close(F);
    assign(uz,full);
    rewrite(uz);
    writeln(uz,nick);
    close(uz);
    clrscr;
    aa;
    write('Chces se nyni prihlasit a hrat?<y/n>: ');
    read(car[2]);
    case car[2] of
    'y','Y':
      log;
    else exit;
    end;
    rep[1]:=false;
   end;

Nahlásit jako SPAM
IP: 213.155.225.–
Mircosoft+1
Věrný člen
23. 1. 2012   #3
-
0
-

Chybu s takovýmhle číslem jsem ještě neviděl, ale otázka je, co používáš za překladač. V TP jsou čísla chyb snad maximálně trojciferná.

Tady máš seznam na první pohled viditelných chyb, víc z toho nepoznám:

- V proceduře ss není definován soubor f. Ale jestli je globální, mělo by to fungovat.

- Cyklus while (c=b) do readln(c); je úplně mimo. Zaprvé readln s jedním parametrem čte z klávesnice a ne ze souboru, zadruhé ta podmínka je přesně obráceně a zatřetí ti tam chybí kontrola konce souboru, takže by ti program po opravě prvních dvou chyb nejspíš skončil buď pádem (při {$I+}) nebo nekonečnou smyčkou (při {$I-}).

- V proceduře log voláš nedefinovanou proceduru aa.

- while not eof(F) do ss(full); je nesmysl, protože se to cyklí už v ss.

- Close(f) je tam navíc, protože už proběhne v ss. A nejsou definované proměnné f a rep.

- V proceduře reg: read; je nesmysl, smaž to (nevím, možná je to zdroj té chyby).

- Než ze zadaného jména sestavíš jméno souboru, zkontroluj si, jestli to vůbec půjde (nepovolené znaky, mezery, délka atd.). Ale jestli je uživatel opatrný, program pojede.

- Nedefinované věci f, aa, car a rep.

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Kalgys0
Návštěvník
23. 1. 2012   #4
-
0
-

#3 Mircosoft
aa je definovane driv f je globalni F:text car:array[1..5] of char a rep:array[1..5] of boolean to vse je globalni

soubor udaje existuje jsou v nem po radcich jmeno+' '+heslo

btw to readln uz mam upravene 

a to read v procedure reg mam proto, ze pri otazkach na udaje mi to preskakovalo ihned k heslo a jemno to nechtelo a to nam radila ucitelka,

program se normalne rozjede registrace je v pohode zapise se do souboru udaje a vytvori si i vlastni soubor pro toho zaregistrovaneho chyba se objevi ve chvili odeslani prihlasovacich udaju

pouzivam lazarus free pascal IDE

PS: kamos co programuje uz dlouho v tom nevidi zadnou chybu

Nahlásit jako SPAM
IP: 212.47.23.–
Mircosoft+1
Věrný člen
24. 1. 2012   #5
-
0
-

To, že někdo nevidí žádnou chybu, nemusí nutně znamenat, že tam žádná není :-) (kdyby nebyla, asi by to nepadalo, že jo).

Jestli ti tohle:

write('Jmeno: ');
readln(nick);
write('Heslo: ');
readln(pass);

ignoruje to první readln(nick) a na obrazovce vidíš rovnou "Jmeno: Heslo: _", je někde něco špatně. Napadá mě možnost, že v bufferu klávesnice zůstal od někdy zmáčknutý enter a readln ho vzalo a vyhodnotilo jako konec zadávání jména. To by se mohlo stát snad jedině v případě, že bys někde předtím používal nějaké čekání (Delay) a během něj omylem ten enter zmáčknul. Ale těžko říct, když nevidím celý program. Řešil bych to resetem klávesnice před prvním readln: while keypressed do readkey (případně něco:=readkey, kdyby náhodou Lazarus nebral rozšířenou syntaxi).

Zkus se kouknout do manuálu, co to číslo chyby znamená - to může docela dost napovědět.

Nejjistější věc asi bude použít krokování programu a projet ho příkaz po příkazu, pak přesně uvidíš, kde k té chybě došlo. Ale nevím, jak se to v Lazaru dělá a jestli to vůbec jde. V nejhorším si prostě hoď za každý příkaz writeln, které ti řekne, kde zrovna jsi.

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý