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 :

problème de pointeur


Sujet :

C

  1. #1
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut problème de pointeur
    re bonjour a tous !!

    bon tjs et encore des soucis...

    cette fois il s'agit d'un code servant a faire un menu pour l'utilisateur.

    dans les switchs les ..... sont la pr eviter les repetitions de case...

    voila le code:

    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    #define  FicCaracteristiquesAvion avion
     
    void afficher_fichier(FILE*);
    void consult_fichier();
    int main (void)
    {
     char demande;
     int i=0,profile;   
     printf("profile:");
     
     scanf("%d",&profile);  
     switch (profile)
      {
       case 1: while((demande!='r')&&(demande!='c')&&(demande!='m'))
         {
     
          printf("recherche tapez 'r'\nconsultation fic: tapez 'c'\nmodification fic: tapez 'm'\n");
          fflush(stdin);
          scanf("%c",&demande);
          i++;
          if(i==3)
          {
           printf("tro dessais");
           break;
          }
         }
         break;
       ......
      }
     switch (demande)
     {
     
     case 'c': printf("consultation fichier");
      consult_fichier();
      break;
     .....
     }
     return 0;
    }
     
     
     
    void consult_fichier(void)
    {
     
     FILE* flot;
     int rep=0;
     
     printf("\nchoisir fich");
     
     scanf("%d",rep);
     switch(rep)
     {
      case 1: flot=fopen("avion.txt","r+");
       if (flot==NULL) 
       {
        printf("\nerreur ouverture");  /* à retirer */
        perror("avion.txt");
       } 
       if (ferror(flot))
       {
        perror("avion.txt");
       }
       afficher_fichier(flot);
       break;
      .....
     }
    }
     
    //  +fonction afficher_fichier()
    je recois le message d'erreur avant le switch final sur (rep): "machin.exe a rencontré un problème et doit fermer"...

    a priori il s'agirait de pointeurs mais bon presque pas presents... donc je pense aux problemes de flots et de fichiers mais je vois pas ou ca coince vu que les tests perror() etc ne fonctionnent pas ( le prog sarrete avant...)

    merci de votre aide !!

  2. #2
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define FicCaracteristiquesAvion avion
     
    void afficher_fichier(FILE*);
    void consult_fichier();
     
    int main(void)
    {
        char demande;
        int i=0, profile=0;
     
        printf("profile :");
     
        scanf("%d", &profile);  
     
        switch (profile)
        {
            case 1:
                while((demande!='r')&&(demande!='c')&&(demande!='m'))
                {
                    printf("recherche tapez 'r'\nconsultation fic: tapez 'c'\nmodification fic: tapez 'm'\n");
                    fflush(stdin);
                    scanf("%c", demande);
                    i++;
                    if(i==3)
                    {
                        printf("trop d'essais");
                        break;
                    }
                 }
                 break;
                 ......
        }
     
        switch (demande)
        {
            case 'c':
                printf("consultation fichier");
                consult_fichier();
                break;
                .....
        }
     
        return 0;
    }
     
     
     
    void consult_fichier(void)
    {
        FILE *flot;
        int rep=0;
     
        printf("\nchoisir fich");
     
        scanf("%d", &rep);
     
        switch(rep)
        {
            case 1:
                flot = fopen("avion.txt", "r+");
                if(flot==NULL)
                {
                    printf("\nerreur ouverture");  /* à retirer */
                    perror("avion.txt");
                } 
     
                if (ferror(flot))
                {
                    perror("avion.txt");
                }
     
                afficher_fichier(flot);
                break;
                .....
         }
    }
     
    //  +fonction afficher_fichier()
    Voici dejà un code bien mieux aéré et plus compréhensible (pour moi en tout cas ).

    J'ai pas encore vraiment chercher des erreurs mais j'ai cependant remarqué des erreurs avec scanf : des fois tu oublies le & et des fois tu le mets quand il ne le faut pas... De toute manière je te conseillerais plutot fgets à scanf

  3. #3
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    oki merci ca marche deja mieux avec le &rep ^^ lool

    par contre maintenant j'ai un message d'erreur :

    debug assertion failed
    file fgets.c
    line 59
    string!=NULL

    j'en avais deja rencontré un auparavant avec str!=NULL et je sais plus comment il avait ete reglé...

    m'enfin si ca se trouve ca differe le string!= du str!= ... enfin je pense ^^

    vous auriez pas une ptite idée ??

  4. #4
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par BnY
    oki merci ca marche deja mieux avec le &rep ^^ lool

    par contre maintenant j'ai un message d'erreur :

    debug assertion failed
    file fgets.c
    line 59
    string!=NULL

    j'en avais deja rencontré un auparavant avec str!=NULL et je sais plus comment il avait ete reglé...

    m'enfin si ca se trouve ca differe le string!= du str!= ... enfin je pense ^^

    vous auriez pas une ptite idée ??
    C'est parceque tu fais appel à la fonction assert() dans le fichier fgets.c
    Pour supprimer ce message il faut définir la constante symbolique NDEBUG, soit avec un #define ou bien avec l'option de compilation -D (si j'ai bonne mémoire)

  5. #5
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    oki mais supprimer ce message évite-il aussi l'erreur ?? lol

    et il n'y pas moyen d'éviter ce NDEBUG, par exemple quand tu dis que je fais appel a assert(), je sais pas avec quelle fonction j'y fais appel (sans le vouloir)...

    et voila que maintenant j'ai ecrit un autre code qui n'a rien a voir en rouvrant visualCpp et il me met exactement le meme message alors qu'avant il me le mettait pas... :s

    ce serait pas du au compilateur ??

  6. #6
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    par exemple la quand je fais le code suivant:

    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    int main (void)
    {
     
     FILE *fpaero;
     
     int i=0,j=0,k=0,ID;
     
     char *chaine=NULL;
     
     int tab[40][40];
     
     fpaero=fopen("FicCaracteristiquesAeroport.txt","r");
     
     if(fpaero==NULL)
     {
      printf("nn");
     }
     
     while(fgets(chaine,sizeof chaine,fpaero)!=NULL)
     {
     
    while(chaine[k]!='\t')
      {
       ID=chaine[k];
     
       k++;
     
       printf("%d",ID);
     
       tab[i][0]=ID;
     
       tab[0][j]=ID;
     
       i++;
     
       j++;
      }
     }
    }
    il m'imprime "nn" donc le flot est NULL et il me met le meme message d'erreur... deja je vois qu'est ce qui peut faire que le flot reste NULL alors que j'ai fait fopen comme il faut ...

    sinon pour NDEBUG j'ai pas bien compris comment m'en servir...

    en faisant juste

    il ne se passe rien de plus.. tu pourrais m'éclaircir stp

    merci

  7. #7
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    pour le moment, moi, je ne vois qu'un truc a la rigueur, c'est de mettre le chemin aboslu et non pas relatif dans tes fopen...
    test et dis moi si ca change quelque chose...

  8. #8
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    t'entends quoi par le chemin absolu et relatif lol ???

  9. #9
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    Citation Envoyé par BnY
    t'entends quoi par le chemin absolu et relatif lol ???
    un chemin relatif, c`est ce que tu fais : nomdefichier.txt
    un chemin absolu, c`est du genre : C:\repertoire_fichier\nomdefichier.txt

  10. #10
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    oki bon voici un petit bout de code que j'ai modifié et avec le chemin absolu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     switch(rep)
     {
      case 1: if((flot=fopen("C:\Program Files\Microsoft Visual Studio\MyProjects\testlogincorrigé\tlogcorr\FicCaracteristiquesAvion.txt","r+"))==NULL)
        {
         fprintf(stderr,"\nerreur impo lire fich %s\n",AVION);
         return(EXIT_FAILURE);
        }
       afficher_fichier(flot);
       fclose(flot);
       break;
    deja il ne me met plus l'erreur debug assertion failed , par contre le flot reste NULL... et pourtant mon fichier est bien present...

  11. #11
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    Citation Envoyé par BnY
    oki bon voici un petit bout de code que j'ai modifié et avec le chemin absolu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     switch(rep)
     {
      case 1: if((flot=fopen("C:\Program Files\Microsoft Visual Studio\MyProjects\testlogincorrigé\tlogcorr\FicCaracteristiquesAvion.txt","r+"))==NULL)
        {
         fprintf(stderr,"\nerreur impo lire fich %s\n",AVION);
         return(EXIT_FAILURE);
        }
       afficher_fichier(flot);
       fclose(flot);
       break;
    deja il ne me met plus l'erreur debug assertion failed , par contre le flot reste NULL... et pourtant mon fichier est bien present...
    rajoute apres ton "r+" un b ou un t en fonction de si ton fichier est binaire "r+b" ou ASCII (=texte) "r+t"

  12. #12
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    c'est fait mais cela ne change pas mon flot NULL... je commence a m'inquieter la lol !!

  13. #13
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    peux tu me mettre la declaration de flot et stderr STP...

  14. #14
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    FILE*flot;

    pour stderr c'est (presque) comme stdout donc c'est compris dans stdio.h...

  15. #15
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    Citation Envoyé par BnY
    FILE*flot;

    pour stderr c'est (presque) comme stdout donc c'est compris dans stdio.h...
    oui, j'ai vu, merci...je cherche

  16. #16
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    j'ai trouve pourquoi!!! cela vient du fait que dans l'adresse, tu mets une sequence d`echapement que tu n`as pas double!!!!!!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     switch(rep)
     {
       case 1: if((flot=fopen("C:\\Program Files\\Microsoft Visual Studio\\MyProjects\\testlogincorrigé\\tlogcorr\\FicCaracteristiquesAvion.txt","r+"))==NULL)
       {
           fprintf(stderr,"\nerreur impo lire fich %s\n",AVION);
           return(EXIT_FAILURE);
       }
       afficher_fichier(flot);
       fclose(flot);
       break;

  17. #17
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    ola lool
    vive la fatigue lool

    dsl je fais du nimporte quoi je lis ton mess apparement tu as trouvé donc c super lol merci encore

    je lis ca et si jai un problm je re lol

  18. #18
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    Citation Envoyé par BnY
    ola lool
    vive la fatigue lool

    dsl je fais du nimporte quoi je lis ton mess apparement tu as trouvé donc c super lol merci encore

    je lis ca et si jai un problm je re lol
    je patientes...

  19. #19
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    oki c super ca marche

    bon par contre je crois ke le debug assertion failed m'en veu puisqu'il reapparait juste apres au moment de la fonction afficher_fichier() que voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void afficher_fichier(FILE*flot)
    {
     char *chaine=NULL;
     
     while(fgets(chaine,sizeof chaine,flot)!=NULL)
     {
      printf("\n%s",chaine);
     }
    }
    avec l'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    afficher_fichier(flot);
    ...ier(flot) etant celui que l'on vient d'ouvrir...

    si tu dois y aller n'hesite pas je voudrais pas te retarder ( vu que tu m'as dit "je pars donc..." je crois

    enfin si t'as une idée n'hesite pas a ton retour lol

    merci encore

  20. #20
    BnY
    BnY est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Par défaut
    déclaration de la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void afficher_fichier(FILE*);

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43
  2. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  3. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49
  4. djgpp et pointeurs far -2
    Par elvivo dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 29/07/2002, 22h43
  5. djgpp et pointeurs far
    Par elvivo dans le forum C
    Réponses: 2
    Dernier message: 13/07/2002, 00h44

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