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 :

Projet C Probleme avec les fichiers


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Projet C Probleme avec les fichiers
    Bonjour,

    j'ai un projet C a faire , le but est de mettre en oeuvre un interpreteur de commandes SQL de sorte qu'on puisse gerer ma base de donnee depuis les lignes de commandes . Je viens de creer 2 fonctions une pour creer une table et l'autre pour afficher les tables . Je ne sais pas d'ou vient mon probleme mais quand je met dans la main les deux fonctions j'arrive plus a rajouter des tables par contre si je met dans le main juste une des des fonctions ça marche, aussi un autre probleme, quand je rajoute une table la premiere lettre du nom de la table n'est pas affiché et le nbr max des colonnes non plus

    Voila mon code source :

    1- fichier struc.h

    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
    typedef struct
    {
        char NomColonne[32];// nom de la colonne dans la table
        char TypeColonne; // type de la colonne 'C'= char, 'E'=entier, 'F'=réel, B= booléen
        int TailleColonne ;// taille en octet
    } COL;
     
     
    typedef struct
    {
        char NomTable[32];
        short YY, MM,DD; // date de modification année, mois, jour
        int NbRecord ; // n o m b r e d ' e n r e g is t r e m e n t s
        int LengthHeader ; // t a ille e n o c t e t s d e l' e n-tête (à calculer)
        int LengthRecord ; // t a ille e n o c t e t s d e l' e n r e g is t r e m e n t ( à c a lc u le r )
        COL TabCol[16] ; // description des colonnes de la table
        int NbMaxCol; // No m b re e ffe c t if d e c o lo n n e s d a n s la t a b le
    }EN_TETE;
     
     
    struct tm* localtime (const time_t *secondes);
    2 - fichier fonctions.h

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "struc.h"
    #include <time.h>
    #define TAILLE_MAX_nomtable 3
     
     
    void ajouter_table(FILE *btable){
     
     
     
        EN_TETE table;
        int i;
        char ntb[32];
        int nb;
        nb=fread(&table, sizeof(table),1,btable);
     
     
        getchar();
        printf("saisir le nom de la table : ");//nom de la table
        gets(ntb, 32, stdin);
        //enlever les espaces
        for(i=0;i<=strlen(ntb);i++){
            if(ntb[i]==' '){
                ntb[i]='_';
     
            }
        }
     
        //verification si une autre table du meme nom existe
        while(nb!=NULL && table.NomTable==ntb){
     
            printf("Ce nom existe deja choisissez un autre :");//nom de la table
            fgets(ntb, 32, stdin);
            //enlever les espaces
            for(i=0;i<=strlen(ntb);i++){
                if(ntb[i]==' '){
                    ntb[i]='_';
                }
            }
     
        }
     
        strcpy(table.NomTable, ntb);
        printf("saisir le nombre total des colonnes :");//nbr des col
        scanf("%d",table.NbMaxCol);
     
     
        table.NbRecord=0;
        table.LengthHeader=sizeof(table);
        table.LengthRecord=0;
     
     
     
     
     
        // generer la date
     
     time_t secondes;
        struct tm instant;
        time(&secondes);
        instant=*localtime(&secondes);
     
        table.YY=instant.tm_year-100;
        table.MM=instant.tm_mon+1;
        table.DD=instant.tm_mday;
     
     
     
     
        //remplir l'entete&creer fichier table
     
        fwrite(&table,sizeof(table),1,btable);
     
     
     
    }
     
     
    void afficher_table(FILE *btable){
        EN_TETE table;
        int nb;
        nb=fread(&table, sizeof(table),1,btable);
        fseek(btable,0,SEEK_SET);
        printf("\n\n\t=== Tables ===\n");
     
        do
        {
            nb=fread(&table, sizeof(table),1,btable);
        if (nb!=0)
            {
            printf("*** %s", table.NomTable);
            printf("*** %d",table.NbMaxCol);
            printf("*** %d/%d/%d\n", table.DD,table.MM,table.YY);
            }
        }
        while(nb!=0);
     
     
     
     
    }
    3 - fichier main.c


    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "fonctions.h"
    #include "struc.h"
    #include <time.h>
     
    int main(){
     
        char quite='n';
        int choix;
        FILE *btable;
        btable=fopen("tables.txt","a+");
     
    while(quite!='o'){
            printf("**********Choix Menu****************\nTapez:\n1 pour afficher les table\n2 pour ajouter une table");
            scanf("%d",&choix);
            switch (choix)
            {
            case 1:
            afficher_table(btable);
            choix =0;
     
            break;
     
            case 2:
     
            ajouter_table(btable);
            choix =0;
            break;
     
            }
     
     
     
    }
     
    fclose(btable);
        return 0;
     
    }

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour commencer, évite de mélanger fread()/fwrite() avec l'ouverture non-binaire de fichiers (fopen sans le "b").
    Évite aussi gets().
    Et utilise strcmp() au lieu == pour comparer deux 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.

Discussions similaires

  1. probleme avec les fichier jar
    Par maind5or dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 14/05/2007, 14h50
  2. Probleme avec les fichiers XML
    Par fle7a dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/07/2006, 10h32
  3. Probleme avec les fichier openGL32.dll et glu32.dll
    Par gazzall17 dans le forum OpenGL
    Réponses: 4
    Dernier message: 16/03/2006, 12h10
  4. Probleme avec les fichier faire un copier coller
    Par mcdonald dans le forum Général Python
    Réponses: 4
    Dernier message: 29/01/2006, 13h38
  5. [VB.NET] Probleme avec les fichiers!!
    Par ludovic85 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/01/2005, 17h12

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