Code bugg , veut savoir la raison
Résolu/Fermé
glennog
Messages postés
293
Date d'inscription
jeudi 3 janvier 2013
Statut
Membre
Dernière intervention
19 novembre 2013
-
10 févr. 2013 à 02:55
glennog Messages postés 293 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 19 novembre 2013 - 12 févr. 2013 à 20:32
glennog Messages postés 293 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 19 novembre 2013 - 12 févr. 2013 à 20:32
A voir également:
- Code bugg , veut savoir la raison
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
10 févr. 2013 à 04:24
10 févr. 2013 à 04:24
Déjà tu utilises des variables globales (fichier, etude, rep) et ça c'est mal !
Il est toujours bien mieux d'utiliser des paramètres, et a fortiori utiliser des variables locales, plutôt que des variables globales qui servent à tout et n'importe quoi.
Ensuite, tu mélanges tout (encore), en faisant à la fois du traitement de fichier, de l'interactivité avec l'utilisateur, et tout ça dans la même procédure.
Il faut scinder ton code afin d'avoir des procédures qui font une seule chose à la fois, et qui le font bien (gestion des erreurs en particulier). Cela permet de faire des codes plus simples à écrire, plus simple à lire et plus simple à déboguer !
Enfin, et c'est l'un de tes plus gros problème, tu utilise un reset, puis un rewrite, ce qui efface tout, puis tu fais un while not eof, avec des read bidon qui sont juste là pour faire avancer la tête de lecture sur un fichier que tu viens de toute façon d'écraser et qui est donc vide --'
Tu devrais plutôt utiliser un append si ton fichier est un Text ou alors un reset suivi d'un seek si c'est un fichier binaire (ce qui est surement le cas ici)
Ensuite les {$I-}, {$I+} et IOResult, il faut les utiliser correctement ou alors ne pas les utiliser du tout, mais s'en servir mal est encore pire !
PS. J'ai corriger le code de tête, il faudrait tester en remplaçant TypeDuFichier et TypeDeEtude par leurs valeurs respectives, et corriger les fautes qui traînent :
Il est toujours bien mieux d'utiliser des paramètres, et a fortiori utiliser des variables locales, plutôt que des variables globales qui servent à tout et n'importe quoi.
Ensuite, tu mélanges tout (encore), en faisant à la fois du traitement de fichier, de l'interactivité avec l'utilisateur, et tout ça dans la même procédure.
Il faut scinder ton code afin d'avoir des procédures qui font une seule chose à la fois, et qui le font bien (gestion des erreurs en particulier). Cela permet de faire des codes plus simples à écrire, plus simple à lire et plus simple à déboguer !
Enfin, et c'est l'un de tes plus gros problème, tu utilise un reset, puis un rewrite, ce qui efface tout, puis tu fais un while not eof, avec des read bidon qui sont juste là pour faire avancer la tête de lecture sur un fichier que tu viens de toute façon d'écraser et qui est donc vide --'
Tu devrais plutôt utiliser un append si ton fichier est un Text ou alors un reset suivi d'un seek si c'est un fichier binaire (ce qui est surement le cas ici)
Ensuite les {$I-}, {$I+} et IOResult, il faut les utiliser correctement ou alors ne pas les utiliser du tout, mais s'en servir mal est encore pire !
PS. J'ai corriger le code de tête, il faudrait tester en remplaçant TypeDuFichier et TypeDeEtude par leurs valeurs respectives, et corriger les fautes qui traînent :
procedure ajouter(var etude:TypeDeEtude); var fichier:TypeDuFichier; begin assign(fichier,'etudiant.dat'); reset(fichier); seek(fichier,fileSize(fichier)); write(fichier,etude); close(fichier); end; function saisieEtude():TypeDeEtude; begin write('Matricule: '); readln(result.matricule); write('Nom: '); readln(result.nom); write('Prenoms: '); readln(result.prenom); write('Classe: '); readln(result.classe); write('Sexe: M/F: '); read(result.sexe); end; procedure interfaceAjout(); var rep:char; begin clrscr; writeln(' ******* PROGRAMME *******'); writeln(' ******* ENREGISTREMENT *******'); writeln(' ******* ETUDIANT *******'); writeln; do ajouter(saisieEtude()); write('VOULEZ-VOUS EFFECTUER UN AUTRE ENREGISTREMENT ETUDIANT ? O/N : '); readln(rep); while (rep='o') or (rep='O'); end;
glennog
Messages postés
293
Date d'inscription
jeudi 3 janvier 2013
Statut
Membre
Dernière intervention
19 novembre 2013
4
12 févr. 2013 à 20:32
12 févr. 2013 à 20:32
merci beaucoup pour tes critiques , elles me permettent de mieux comprendre mes erreurs et de les corriger .
merci à toi
merci à toi