Eroare de manipulare în pascal - programul meu

Evaluare: 0/5

Dacă citiți datele de intrare-ieșire în PascalABC.NET. atunci este posibil să aveți o întrebare: „Și cum vă protejați împotriva datele introduse de utilizator incorecte, după ce utilizatorul introduce date incorecte va fi o eroare în timpul rulării?“. Da, există o eroare numită o excepție. Excepții - o greșeală care nu poate fi evitată în realizarea programului, iar singurul lucru care poate face un program este oprit. În ceea ce privește opinia mea, și pe bună dreptate. Să ne imaginăm că suntem în curs de dezvoltare unele aplicații care au nevoie de unele fișier care însoțește Programul. Ia mai precis am dezvoltat jocul, care durează câteva fișiere, care sunt materiale asociate cu jocul stocate. Acest joc am luat-o și a dat prietenului său de a juca, și a luat-o și a intrat în dosarele, au început să se adapteze, și poate fi, în general, ridicat și ia îndepărtat. În cursul complet, programul într-un astfel de caz este de a da pur și simplu o eroare și, în orice caz, nu începe. Este acest tip de erori sunt numite excepții.

În Pascal există două tipuri de erori: excepții și erori de diagnostic. Excepții - o eroare de program, în cazul în care programul nu va fi capabil să efectueze în continuare cod de program, iar programul va fi forțat să oprească activitatea lor. erori de diagnostic - sunt erori care apar în timpul testului (numai în timpul dezvoltator program de testare în versiunea finală a acestor erori nu sunt prezente.) dezvoltator Programul soobschyayuschie că, în cursul programului de lucru a avut loc un eșec, din cauza căreia și mai mult (!) programul poate fi incorectă, iar dezvoltatorul va (dacă programator dorește, el poate continua executarea programului Astfel, erorile de diagnostic () -!. este doar un avertisment cu privire la locul de muncă incorectă și ost Programul novit nu poate), computerul va continua programul.

Începem să învățăm eroarea cu erori de diagnostic. Această eroare este cauzată de utilizarea comenzilor

unde predicatelor - este un predicat testat

TEXT_ERROR - acesta este textul afișat în fereastra cu eroarea, dacă predicatului a fost falsă (câmpul nu este obligatoriu).

Apel aceste erori similare operatorului condiționată, exact opusul. De fapt, Assert verifică korektno de date și o eroare în cazul în care acestea nu sunt corecte. În mod firesc, ca un predicat poate transfera constantele logice și expresii logice complexe.

În general, aceste erori de diagnostic sunt foarte utile în dezvoltarea de programe complexe, pentru că datorită lor, puteți verifica în mod automat programul pentru erori (numai dacă știm la ce valoare se obține sau care au ca rezultat. De exemplu, «assert (impare ( 5) = true); »,«assert (nui (4) = false);»,«assert ((5 + 5) = 10);»,« assert (MYDATA = 0) „).. Acest lucru, de altfel, una dintre modalitățile de a scrie un program de „testare“. Acest lucru este atunci când vom scrie primele teste pentru programul nostru, și apoi scris programul în sine, astfel încât toate testele au fost finalizate fără erori.

Da, și chiar erori de diagnostic nu poate fi procesată. Și este de înțeles de ce (pentru că există o versiune personalizată a Afirmați-uri, tratamentele și modul în care acestea nu fac).

Pentru o mai mare claritate, din nou, uita-te la un exemplu cu estimările din lecția precedentă. Numai atunci vom procesa datele introduse prin ASSERT.

Să analizăm codul. Declarata unsigned întreg „o“ variabilă, care, în al treilea rând se citesc de la tastatură. Afirmați verificări suplimentare la această variabilă la condițiile: valoarea „a“ este mai mare sau egal cu 2, iar valoarea sa este mai mică sau egală cu 5. Dacă această condiție nu este îndeplinită, un mesaj de diagnosticare cu textul „de intrare invalid“. Ei bine, atunci puteți înțelege deja ce se întâmplă. Probabil ați observat că „un caz“ nici un operator de ramură „diferit“. Și nu este necesară, deoarece toate celelalte cazuri le-am testat Assert-lea.

Ne întoarcem acum la excepțiile. Excepțiile sunt cauzate de foarte simplu:

care ridica - este terminarea programului și excluderea de apel

noi - cu acest cuvânt vom introduce mai târziu. Până în prezent, atât de amintesc.

Exeption_Name - este numele excepție. Pascal are o ierarhie foarte mare de excepții.

ApplicationException - Toate excepțiile de utilizator

excepții de sistem - SystemException

AccessViolationException - accesul neautorizat la memorie

ArgumentException - argumente incorecte

ArgumentNullException - argumentul nu există

ArgumentOutOfRangeException - argumentul este în afara intervalului

ArithmeticException - excepții aritmetice

DivideByZeroException - întreg divide cu 0

IndexOutOfRangeException - indicele de matrice

InvalidCastException - o distributie explicită la un tip greșit

FormatException - eroare I / vvyvoda

OutOfMemoryException - Memorie OS

StackOverflowException - perpolnen stivă

IOException - System.IO spațiu de nume

FileNotFoundException - Fișierul nu a fost găsit

EndOfStreamException - sfârșitul neașteptat de fișier

Această întreagă ierarhie de excepții. În cele mai multe cazuri, toate știu că nu este necesar, dar dacă doriți să se ocupe de fiecare excepție separat, va trebui să cunoască întreaga ierarhie.

Pentru majoritatea cazurilor, este posibil ca un nume de excepție sau System.Exception scrie Excepție (aceeași).

TEXT_ERROR - text, emis pe ecran (nu există toate excepțiile).

Atenție! Trebuie amintit faptul că, în contrast cu assert, fără excepții pentru corectitudine nu verifica. De îndată ce programul ajunge la linia care începe cu «ridica», programul va fi oprit și o eroare va fi emis. Prin urmare, excepția este mai bine de a provoca una dintre ramurile unei declarații condiționată (controale condiționată de corectitudinea oricărei date în cazul incorecte (una din ramurile) vor fi aruncate. Pentru o mai mare claritate, ia în considerare exemplul estimărilor, soluția care cu numele de utilizator de mai sus, dar cu excepții.

Luați în considerare acest cod. „O“ a declarat din nou o variabilă întreg fără semn. Se citește valoarea de la tastatura. Și atunci există un control asupra corectitudinii datelor introduse, iar în cazul în care datele de intrare nu este corectă (adică, în cazul în care variabila lor de atribuire „o“ mai puțin de 2 sau mai mult de 5 (în general, a fost posibil de a simplifica predicatul la «if (o> 5) sau (o<2 ) then »)) то вызывается исключение. Которое останавливает ход выполнения программы и на экран выводится сообщение вида «Program1.pas(6). Ошибка времени выполнения: некорректный ввод». А, если данные корректны, то программа продолжает свою работу (поскольку в данном примере ветки «иначе» нету, то программа просто продолжит выполнять свою работу). Ну а, что твариться далее, Вам должно быть понятно.

În Pascal există două structuri de manipulare a erorilor. acest

unde Acțiunea 1; - este setat (în acest caz, nici o acțiune, precum și un set de acțiuni), acțiuni pe care încercăm să le efectueze (!)

Acțiunea 2 - un set de acțiuni care urmează să fie efectuate atunci când o eroare / excepție a avut loc în executarea Acțiunea 1

Acțiunea 3 - un set de acțiuni care urmează să fie executate în orice caz, indiferent dacă: A apărut o eroare în sau nu Acțiunea 1 a fost, iar codul a fost procesat fără erori.

Atenție! Aceste două structuri sunt doar pe o excepție! ei nu funcționează pe erori de diagnostic.

Luați în considerare exemplul sunt evaluat numai cu adaos de Incercati-Cu excepția blocului.

În acest cod, întregul cod din exemplul anterior, am pus complet în unitate (tot ce se află între încercare și cu excepția). Astfel, am asigurat că toate erorile care pot apărea atunci când codul va fi procesat și o excepție va avea loc. Dacă există vreo eroare (pentru că poate apărea în timpul introducerii datelor (în cazul în care utilizatorul introduce datele unui alt tip (cum ar fi cuvântul „salut“ sau „-3.14“, „c“. Opțiuni de intrare incorecte foarte mult)) în cazul în care a intrat aprecierea eronată a interval (de exemplu, atunci când intră în numărul „10“ ar trebui să fie excepția „invalidă“, deoarece aceasta nu va)) în timpul programului de execuție, pur și simplu se va proceda la un cod care este în afară de bloc (tot ceea ce este între afară și se termină;) . Deci, vom procesa orice erori, iar utilizatorul nu știe că nu a existat nici o eroare. Se va presupune că programul a lucrat bine.

Această eroare de manipulare este adesea necesar. Deci, utilizatorul poate face pentru a introduce datele pentru atâta timp cât acesta nu intră corect Dunn.

În timp ce nu se poate dezasambla acest cod. Tocmai l-am adus, încercați să executați acest cod. Dar voi explica modul în care funcționează. Aici programul va forța utilizatorului să introducă date până când eroarea va avea loc atunci când se lucrează cu datele introduse. De îndată ce ați introdus datele corecte, software-ul nu mai funcționează.

Ne întoarcem acum la a doua unitate de procesare încercare - în cele din urmă. Așa cum am spus, acest bloc de manipulare excepție este caracterizat prin aceea că ceea ce este în blocul în cele din urmă va fi executat nu neapărat în funcție de faptul dacă a existat o eroare în timpul execuției programului, sau nu a fost. Să considerăm un exemplu cu estimările, doar afișarea mesajelor despre dacă eroarea a fost în prelucrarea datelor, sau nu a fost.

Să analizăm codul. La început am afirmat boolean «meu», în care am stoca datele dacă programul este executat fără erori. Poskolu Nu știu, programul este fără erori dacă face, atribuiți o valoare de „cutii“ (adică, programul va fi efectuată cu o eroare). În cazul în care programul este executat fără erori, atunci această variabilă va fi setat la linia adevărat «meu: = true;». Bloc «în cele din urmă» este o declarație condițională că variabila «meu» apreciează dacă eroarea a fost în performanța programului. Restul știi deja.

Numai în această abordare, există un dezavantaj semnificativ pentru rezolvarea problemelor. Această unitate de prelucrare a datelor nu manipulează eroarea. În cazul în care acestea apar, programul va bloca în cele din urmă și să dea o eroare de execuție:

Acesta a făcut un program de eroare

Runtime de eroare: System.FormatException: șir de intrare a fost nevalid.

în PABCSystem.PABCSystem.Read (Byte x) la E: \ Pascal \ PascalABC.NET \ LibSource \ PABCSystem.pas: linia 3672

. În Program1.Program $ Main () în E: \ Pascal \ PABCWork.NET \ Program1.pas: linia 20

Astfel, dacă sunteți de planificare pentru a face ceva ce ar trebui să fie afișate în indiferent dacă a fost eroarea, este mai bine să utilizați mai multe unități încercați.

În acest exemplu, în cazul în care apare o eroare, atunci acesta va afișa un mesaj de genul:

A apărut o eroare în timpul executării programului

Acesta a făcut un program de eroare

iar în cazul în care programul este executat fără eroare, va afișa un mesaj, cum ar fi:

program de succes

Prelucrarea fiecare individual erori

Nu crezi că ciudat că orice eroare nu a apărut (eroare de intrare, eroare de calculator.), Va fi executat este întotdeauna unul și același cod. Acest lucru nu este în întregime corectă, pentru că nu spune utilizatorului ce sa întâmplat în program și care a fost greșeala lui. Pentru a face acest lucru, să vină cu să pună în bloc, cu excepția, s-ar putea spune, operatorul este ulovny

în cazul în care exception_name - numele excepție

Această „declarație condiționată“ verifică: dacă o excepție este aruncată cu numele exception_name. Și, în cazul în care aceasta a fost cauzată, atunci programul trece la acest cod de operator.

Cu toate acestea, această „declarație condiționată“ există o (pentru cineva) un dezavantaj semnificativ. Această afirmație nu poate fi plasat cu alți operatori. Asta este, dacă vă decideți să fiecăreia dintre posibilele erori de prelucrare modul individual și după tratament (sau pre-tratament) pentru a afișa soobscheie tip „a avut loc în timpul întâlni următoarea eroare“, și apoi afișează un mesaj de eroare, atunci va fi cu această problemă. În Pascal, dacă în blocul cu excepția vă decideți să utilizați operatorul «pe», apoi, în plus față de acești operatori, nu se imprimă.

Și acum, uita-te la un exemplu cu estimările și manipulatorii de excepție individuale.

Acum, fiecare greșeală va fi procesată pe. (Atenție! În acest cod, am schimbat numele excepției în cazul în care datele incorecte privind «DivideByZeroException» (Impartirea cu 0 eroare) ca și în cazul în care dintr-o dată nu există o excepție neidentificate, va fi posibil să se identifice și să elimine. Pe divizia de 0 eroare în acest cod, în general, nu se poate be).

Considerăm acum acest cod. Aici sunt două dintre blocul try. Unul dintre ei încercați-în cele din urmă (monitorizează punerea în aplicare și, în cazul în care programul nu a fost pus în aplicare în totalitate, aceasta înseamnă că a apărut o eroare în curs de desfășurare și doriți să se afișeze un mesaj „în a apărut o eroare de execuție.“ O informație de eroare mai exacte afișează bloc cu excepția (Da. doar în cazul, voi spune că o încercare nu poate fi doar două blocuri, cu excepția u în cele din urmă). și cu excepția unui „condiționale“ bloc de câteva, care verifică aspectul unei excepții cu numele și dacă sa întâmplat, apoi să efectueze lor acțiuni.

Astfel, am învățat să se ocupe de erorile de intrare, precum și orice alte erori pe care le putem întâlni în programare. Da, am folosit exemplul polsednem excepție «DivideByZeroException» pentru procesarea corectitudinii datelor de intrare în loc de excludere a acestora. În Pascal, puteți crea propriile excepții, dar mai mult pe care mai târziu. Avem acum suficientă experiență pentru a face acest lucru.

  • Sunteți aici:
  • principal
  • Educație programare
  • Pascal ABC .NET
  • Eroare de manipulare în Pascal ABC.NET