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 :

variable créer et disparaissante


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Par défaut variable créer et disparaissante
    salut à tous,

    j'essaie de faire un petit programme, et je bute sur une variable qui disparait.
    OK comme ça sa fait bizarre.
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while(j<100)
    		 {
    		  			 if(aFichier[j].dossier != 0)
    		  			 {
    		  			  strcpy(repertoire, aFichier[j].adresse);
    					 } 
                                             printf("%s",repertoire); //1
    					 j++;  
    		 }
    	 	 printf("%s",repertoire); //2
    	    }
    dans le 1° printf, tout va bien.
    mais le 2° ne s'affiche pas...

    qu'est ce qu'il y a ?

    je desespere, j'ai bosser la dessus presque toute la journée, et j'ai avancé, lentement.

    merci de votre aide

    a+
    hedi07

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Tu ne montres pas assez de code.
    Impossible de t'aider tant qu'on ne voit pas au moins la déclaration de ta chaîne, etc.
    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.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Par défaut
    voici la déclaration: char repertoire[1024] ="."
    et aFichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct fichier
    	 {
    	  	   char nom[100];
    	  	   char adresse[1024];
    	  	   int taille;
    	  	   int vu;
    	  	   int dossier;
    	  	   int niveau;
    	 };
    je mettrai un malloc, quand je saurai ou et en fonction de quoi le mettre, pour le moment c'est le simple développement du noyaux du programme.

    salut
    hedi07

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    On n'arrivera à rien comme ça, montre toute la fonction.
    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.

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Au vu de l'algo, si aFichier[99].adresse contient une chaine vide, alors ni le 1er printf, ni le 2eme n'affiche quelquechose. Donc on peut croire que le 2eme n'affiche rien

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Par défaut
    merci de votre aide,

    gruik>> aFichier[99].adresse ne peut pas contenir de chaine vide car on rentre dans la condition si aFichier[99].dossier est différent de 0, or s'il est différent de 0 la structure est remplie. en effet, si cette sous-variable est différente de 0 c'est que c'est un dossier, et je sais que c'est un dossier car je l'ai analysé, et j'ai mis les résultats dans la structure, adresse comprise.

    en plus j'arrive a avoir l'adresse mais uniquement dans le premier printf(), le deuxième ne veut rien afficher

    medinoc>> je vais donner tout le code, ce bout se trouve dans le main, et il n'est pas trop long:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <string.h>
     
     
    int main(int argc, char *argv[])
    {
     	typedef struct fichier fichier;
     	struct fichier
    	 {
    	  	   char nom[100];
    	  	   char adresse[1024];
    	  	   int taille;
    	  	   int vu;
    	  	   int dossier;
    	  	   int niveau;
    	 };
     
     	struct stat fstat;
     	struct dirent *lecture;  //nom du fichier
     	FILE *file =NULL;
    	DIR *rep;               //repertoire en cours
    	char repertoire[1024] =".", dossier_courant[1024];       //repertoire a lire
    	fichier aFichier[100];  //fichier et dossier du repertoire
    	int i=1, j = 0, nb_de_dossier = 0, niveau = 1, dossier;
     
    	strcpy(aFichier[0].nom ,".");
    	strcpy(aFichier[0].adresse, __FILE__);
    	aFichier[0].taille = 0;
    	aFichier[0].vu = 1;
    	aFichier[0].dossier = 1;
    	aFichier[0].niveau = 0;
     
     
    	//changement de repertoire (même niveau)
    	j = 0;//pour trouver les dossier, ne pas mettre dans le while
    	while(j<2)
    	{	
    		if(nb_de_dossier !=0)
    		{
    		 while(j<100)
    		 {
    		  			 if(aFichier[j].dossier != 0)
    		  			 {
    		  			  strcpy(repertoire, aFichier[j].adresse);
    					 } 
    					 printf("%ld %s\n",j,repertoire);
    					 j++; 
    		 }
    	 	 printf("%s",repertoire);
    	    }
    	    else
    	    {
    	    strcpy(repertoire, ".");
    		}
    		printf("%s",repertoire);
    		rep = opendir(repertoire);
    		/*recuperation de var fichier, et du nombre de fichier dans le repertoire*/
    		while ((lecture = readdir(rep)))  
    		{
    		 	  if ( strcmp(lecture->d_name, ".") == 0 ||
    	     	  strcmp(lecture->d_name, "..") == 0 ) 
    	    	  						continue;
    	    	  //fichier courant
    			  strcpy(dossier_courant, repertoire);
    	 		  strcat(dossier_courant, "/");
    			  strcat(dossier_courant, lecture->d_name);
     
    			  stat(lecture->d_name, &fstat);
    		 	  if(S_ISDIR(fstat.st_mode))
    		 	  {
    			   aFichier[i].dossier = nb_de_dossier + 1;
    			   strcpy(aFichier[i].nom, lecture->d_name);
    			   aFichier[i].niveau = niveau;
    			   }
    	 		  else
    	 		  {
    			   aFichier[i].dossier = 0;
    			   aFichier[i].taille = (int)fstat.st_size;
    			   aFichier[i].niveau = niveau;
    			   strcpy(aFichier[i].nom,lecture->d_name);
    			   }
    			   strcpy(aFichier[i].adresse, dossier_courant);
    			   printf("%s \t\t%ld \n\t %s \n",aFichier[i].nom, aFichier[i].taille, aFichier[i].adresse);
    	 		  i++;
    	 		  nb_de_dossier++;
    		 }
    	 dossier++;
    	 j++;
    	 }
    	 closedir(rep);
    	 system("pause");
       return 0; 	
    }
    voila, je cherche a lister tout les dossier et sous dossier contenu dans un repertoire, ce repertoire est de niveau 0, les dossiers qu'il contient, de niveau 1 et ainsi de suite.
    pour différencier dossier et fichier, la variable aFichier.dossier me sert de booléen : 0 pour un fichier, 1 pour le premier dossier,2 pour le second et ainsi de suite.

    a+
    hedi07

  7. #7
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Pour moi ca marche mais si je met j < 50.

    Sinon tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while(j < 2)
    { 
      while (j<100)
      {
        ...
      }
      ...
    }
    Ta première boucle ne bouclera jamais!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer des variables
    Par Thundie dans le forum Général Python
    Réponses: 6
    Dernier message: 03/02/2006, 17h49
  2. créer un nouveau type de variable ?
    Par florantine dans le forum Langage
    Réponses: 5
    Dernier message: 22/01/2006, 11h32
  3. [JDOM] Créer une variable xml directement dans java
    Par Tigrounette dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 18/12/2005, 14h21
  4. Réponses: 1
    Dernier message: 25/09/2005, 14h29
  5. Réponses: 4
    Dernier message: 13/05/2004, 13h15

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