IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Fichiers en accés direct , détection d'erreur défaillante


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Par défaut
    Merci à toi

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Fichiers en accés direct , détection d'erreur défaillant
    Citation Envoyé par Deejoh
    voici mon code :
    Compile pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    ../main.c:3: warning: function declaration isn't a prototype
    ../main.c: In function `creation':
    ../main.c:16: error: implicit declaration of function `system'
    ../main.c:16: warning: nested extern declaration of `system'
     
    ../main.c:17: error: implicit declaration of function `printf'
     
    ../main.c:17: warning: nested extern declaration of `printf'
    <internal>:0: warning: redundant redeclaration of 'printf'
    ../main.c:20: error: implicit declaration of function `scanf'
    ../main.c:20: warning: nested extern declaration of `scanf'
    <internal>:0: warning: redundant redeclaration of 'scanf'
    ../main.c:20: error: `nomfich' undeclared (first use in this function)
    ../main.c:20: error: (Each undeclared identifier is reported only once
    ../main.c:20: error: for each function it appears in.)
    ../main.c:27: error: implicit declaration of function `InitFichier'
    ../main.c:27: warning: nested extern declaration of `InitFichier'
    ../main.c:29: error: `FILE' undeclared (first use in this function)
    ../main.c:29: error: `Repertoire' undeclared (first use in this function)
    ../main.c:31: error: implicit declaration of function `fopen'
     
    ../main.c:31: warning: nested extern declaration of `fopen'
    ../main.c:37: error: `eleve' undeclared (first use in this function)
    ../main.c:43: error: implicit declaration of function `fseek'
    ../main.c:43: warning: nested extern declaration of `fseek'
    ../main.c:43: error: `elev' undeclared (first use in this function)
    ../main.c:43: error: `SEEK_SET' undeclared (first use in this function)
    ../main.c:48: error: implicit declaration of function `fread'
    ../main.c:48: warning: nested extern declaration of `fread'
    ../main.c:54: error: `true' undeclared (first use in this function)
    ../main.c:63: error: `false' undeclared (first use in this function)
    ../main.c:82: error: implicit declaration of function `fwrite'
    ../main.c:82: warning: nested extern declaration of `fwrite'
    <internal>:0: warning: redundant redeclaration of 'fwrite'
    ../main.c:88: error: implicit declaration of function `fclose'
    ../main.c:88: warning: nested extern declaration of `fclose'
    ../main.c:100: error: implicit declaration of function `getch'
    ../main.c:100: warning: nested extern declaration of `getch'
    ../main.c:110: warning: nested extern declaration of `getch'
    ../main.c:100: warning: redundant redeclaration of 'getch'
    ../main.c:100: warning: previous implicit declaration of 'getch' was here
    ../main.c:114: warning: nested extern declaration of `fclose'
    ../main.c:88: warning: redundant redeclaration of 'fclose'
    ../main.c:88: warning: previous implicit declaration of 'fclose' was here
     
    ../main.c:76: warning: statement with no effect
     
    make.exe: *** [obj/main.o] Error 1

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Par défaut
    ce que j'ai donné du programme est une fonction il n'est pas complet si tu veux je te l'envoie en mp

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Jack_serious
    Citation Envoyé par Deejoh
    Voici mes variables :
    Ca existe en C ca?
    en C99, oui. Inclure <stdbool.h>

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par la drogue c'est mal
    c'est quoi la définition de la structure elev ?

    le main renvoie à une fonction menu.
    non, on ne rappelle pas la fonction main
    C'est techniquement possible en C? mais c'est fortement déconseillé.
    Interdit en C++.

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Jack_serious
    Tu pourrais poster Initfichier() ? Le probleme vient peut etre de la.

    Sinon penses a faire les modifications proposees plus haut.

    Tiens encore une en passant:
    J'ai dit de lui rajouter un espace, j'ai omis de mentionner le fait qu'on definit ses variable au sommet de son bloc.
    En C90, oui. En C99, c'est où on veut, bien que je ne recommande pas cette pratique...

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Jack_serious
    Citation Envoyé par Deejoh
    En ajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define TRUE     1 
    #define FALSE    0
    comme l'a dit la drogue c'est mal ?
    Le type bool n'existe pas en C. C'est du C++.
    Il existe en C99. C'est un alias du type interne _Bool lorsque l'on inclue <stdbool.h>.
    En C tu peux "creer" le type booleen avec une super ruse de derriere les fagots, en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define TRUE   1
    #define FALSE  0
    Mais le type bool n'existera toujours pas.
    On peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef enum {false, true} bool;
    Mais ça ne sert à rien. Le type bool ne sert à rien. Une expression renvoie 0 ou 1. C'est tout ce qui compte. Ensuite, on teste avec if (f) ou if (!f) etc.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Par défaut
    je comprend bien mais dans mon problème que j'utilise un booléen ou un entier la détection du numéro utilisé ou non ne se fait pas ...

  9. #9
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                   //recule au début de l'enregistrement puisqu'on la lu auparavent
                   fseek(Repertoire,-sizeof(elev),SEEK_SET);
    Très mauvais code, SEEK_SET te place au début du fichier, il faut utiliser SEEK_CUR, de toute façon puisque tu as un numéro d'élèves, tu peux peut-être calculer l'emplacement de l'élève dans le fichier à partir de son numéro, ce sera plus correct.

    Une petite question, le prof vous a-t-il prévenu des problèmes de scanf ou pas ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Par défaut
    non pas du tout ...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 91
    Par défaut
    seek_cur va me placer au début du bloc en cours c'est ça ?

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    avec SEEK_CUR, le déplacement est calculé à partir de la position courante dans le fichier, donc effectivement si tu viens de lire un enregistrement, tu retourne à la position avant lecture, mais je le répète, je ne suis pas fan de ses déplacements relatifs, je préfère calculer un déplacement absolu, c'est à mon avis plus sûr.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    On peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef enum {false, true} bool;
    Mais ça ne sert à rien. Le type bool ne sert à rien. Une expression renvoie 0 ou 1. C'est tout ce qui compte. Ensuite, on teste avec if (f) ou if (!f) etc.
    Merci pour <stdbool.h>. Je n'etais pas au courant.

    Par contre, je trouve que le fait d'ecrire des FALSE et des TRUE dans du code le rend plus lisible. Ca permet d'identifier les flags de maniere instantanee. Mais c'est purement esthetique, j'en convient.
    C'est pour une question de reprenabilite du code (quel joli mot...pas la peine de le chercher dans un dico).

  14. #14
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Jack_serious
    Par contre, je trouve que le fait d'ecrire des FALSE et des TRUE dans du code le rend plus lisible. Ca permet d'identifier les flags de maniere instantanee.
    Il est bien plus important de bien nommer les variables en général et les flags en particulier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       int end = 0;
     
       while (! end)
       {
          int c = getchar()
          end = c == '\n';
       }
    En quoi ce code serait plus lisible avec des true et des false ?

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En effet, ici ça sert à peu de chose.
    Pas contre, c'est là que la notation hongroise peut aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int bEnd = 0;
    while (! bEnd)
    	{
    	int c = getchar();
    	bEnd = c == '\n';
    	}
    le préfixe "b" pour booléen, c'est très utile pour voir pourquoi le programmeur teste seulement si la variable est différente de zéro. Ce genre de convention facilite le passage de code.

    Mais bien sûr, il ne faut pas en abuser, comme Microsoft et ses "lpsz" pour des chaînes...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Jack_serious
    Par contre, je trouve que le fait d'ecrire des FALSE et des TRUE dans du code le rend plus lisible. Ca permet d'identifier les flags de maniere instantanee.
    Il est bien plus important de bien nommer les variables en général et les flags en particulier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       int end = 0;
     
       while (! end)
       {
          int c = getchar()
          end = c == '\n';
       }
    En quoi ce code serait plus lisible avec des true et des false ?
    Bien sur qu'il faut donner des nom parlant a ses variables. C'est le plus important.
    Mais rien ne t'empeche de mettre du lait ET du sucre dans ton cafe.
    Apres bien sur on a tous nos habitudes de codages.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ended = FALSE;
     
    while (!ended)
      {
        c = getchar();
        ended = c == '\n';  
      }
    J'aime bien.
    Enfin bref... J'ai l'impression qu'on ne va pas aller tres loin dans cette voie.

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Jack_serious
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ended = FALSE;
     
    while (!ended)
      {
        c = getchar();
        ended = c == '\n';  
      }
    Marche pas. On ne connait pas la valeur de FALSE, donc pour être indépendant, on doit écrire (ok pour l'adjectif)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      ended = FALSE;
     
      while (ended == FALSE)
      {
          c = getchar();
          ended = c == '\n';  
       }
    Ce qui devient lourd...

  18. #18
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Mouais... c'est bien ce que je disais... on pourrais en parler pendant des heures sans arriver a grand chose.

    Mon ecriture manquait peut etre un peu de coherence, je veux bien l'admettre.
    Mais ca reste quand meme comprehensible il me semble.

    Citation Envoyé par Emmanuel Delahaye
    On ne connait pas la valeur de FALSE
    Exact, j'ai oublie le #define... Mais au vu des posts precedents, ca me semblait evident.

    Ton ecriture est sans conteste plus rigoureuse et uniforme.

    Mais je soutiens que la mienne est lisible.
    Et puis je soutiens aussi qu'on a surement des choses plus interessantes a faire que de debattre d'un sujet aussi steril.

    Note: ceci dit la maniere de coder en general, pour faire un code lisible, coherent, clair et propre est un sujet qui me tient beaucoup a coeur. Je prend en compte tes remarques pour la suite.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Trier alphabetiquement un fichier a acces direct
    Par rolby65 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 16/07/2013, 18h50
  2. gestion fichiers en accés direct
    Par gaston11 dans le forum Débuter
    Réponses: 4
    Dernier message: 27/01/2013, 23h11
  3. Fichier en acces direct
    Par DaganaudN dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/05/2008, 11h19
  4. Fichier en accès direct
    Par gelam dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 09/11/2006, 16h57
  5. Réponses: 5
    Dernier message: 02/10/2006, 22h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo