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 lecture de chemin d'un fichier


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 29
    Par défaut probléme de lecture de chemin d'un fichier
    Bonjour à tous ,

    J'ai un probléme au niveau de la lecture de chemin d'un fichier :
    voici mon 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
    
    char * saisie_chemin(){
    	int taille2=10, i=0;
    	char *ptr,c;
    	ptr = (char *) malloc (sizeof(char) * taille2);
    	if (ptr==NULL) {return NULL;}
    	printf("Veuillez entrer le chemin du fichier contenant la matrice :");
    	scanf ("%c",&c);
    	while (c != '\n'){
    		if (i==taille2){
    			taille2=taille2+10;
    			ptr =(char*) realloc (ptr,sizeof(char)*taille2);
    		}
    		ptr[i++] =c;
    		scanf("%c",&c);
    	}
    	return ptr;
    } 
    
    int main () {
    	char *chemin;
    	char choix=' ';
    	double **matrice, **vecteur, **solution;
    	int taille=0;
    
    	while (choix !='Q'){
    		affiche_menu();
    		printf( "\n	Saisissez votre choix : ");
    		scanf("%c",&choix);
    		   switch(choix){
    			    case 'B' : 
    	                               chemin="C:\\cygwin\\home\\Florent\\ASR4\\Projet_math\\matrice.txt";	
    				       chemin= saisie_chemin();
    				       printf("chemin=>%s \n",chemin);	
    			               matrice= lecture_matrice(matrice,chemin);
    			               vecteur= lecture_vecteur(vecteur,chemin);
                                           taille=taille1(chemin);
    			               affiche_matrice(matrice,taille);
    			               affiche_vecteur(vecteur,taille);
    			               determination_matrice(matrice,vecteur,taille); 
    			               retour_menu();
    			               break;
    	             case 'Q': exit(1); 
    			               break;	
    	            default :  printf("Choix incorrect\n");
    			               break;
    	           }
    	}
    }

    La fonction saisie_chemin() ne marche pas dans mon switch alors que si je la met en dehors , elle marche correctement. Et si je tape manuellement le chemin comme souligné ci dessus et que je met la fonction saisie_chemin() en commentaire bien sur, ca marche bien.
    Je ne comprend vraiment pas mon erreur car la fonction de lecture du chemin est correcte.

    Merci d'avance

    Cordialement,

    Flo62

  2. #2
    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
    Sans doute parce que le \n de ta première entrée (le choix dans le menu) est resté dans le buffer.

    Recherche la fonction fclean() sur le forum, elle est utile contre ce genre de problèmes.
    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
    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
    Et j'ajoute: On ne caste pas le retour de malloc() et realloc() en C, et n'oublie pas de faire un free() quand tu n'en as plus besoin.

    Et aussi, exit(), c'est mal (mais bon, ce n'est pas aussi mal en C qu'en C++).
    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.

  4. #4
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (char *) malloc (sizeof(char) * taille2);
    avec malloc il ne faut utiliser un cast !!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (i==taille2){
    			taille2=taille2+10;
    			ptr =(char*) realloc (ptr,sizeof(char)*taille2);
    		}
    je ne sais pas pkoi, puisque i ne change pas ?????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    scanf ("%c",&c);
    	while (c != '\n'){
    		if (i==taille2){
    			taille2=taille2+10;
    			ptr =(char*) realloc (ptr,sizeof(char)*taille2);
    		}
    		ptr[i++] =c;
    		scanf("%c",&c);
    	}
    un boucle do ... while() sera util !!!

    pkoi utiliser un caractère %c et pas une chaine de caractères %s, il faut mieux lire toute la chaine, et puis reserver la mémoire que je veux, c'est d'aprés moi bien sur !!!!

  5. #5
    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
    cmoibal:
    1. Pas de langage SMS ici, s'il te plait (voir les règles).
    2. Il y a un i++ en dessous... Par contre realloc() est mal utilisé: http://emmanuel-delahaye.developpez....es.htm#realloc
    3. Pas sûr, puisque le test doit quand même être fait au début... Moi, j'aurais utilisé getchar() à la place de scanf() et j'aurais fait while((c=getchar()) != '\n') { ... }...
    4. On peut lire morceau par morceaux avec fgets() par exemple, mais caractère par caractère n'est pas vraiment un problème ici.
    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.

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 29
    Par défaut
    Merci à tous pour vos réponses

    Mon probléme est résolu, j'ai simplement enlever ma fonction saisie_chemin() et j'ai remplacé par une simple saisie d'une chaine de caractére avec "%s" et cela passe bien.


    Flo62

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

Discussions similaires

  1. Problème de récupération de chemin d'un fichier en JSP
    Par philou44300 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 23/08/2013, 16h21
  2. [PPT-MAC 2008] Problème de lecture de videos sur un fichier enregistré en PPS
    Par renorcht dans le forum Powerpoint
    Réponses: 0
    Dernier message: 11/11/2009, 11h13
  3. [POI] Problème de lecture des fichiers Word
    Par Dari dans le forum Documents
    Réponses: 9
    Dernier message: 05/07/2007, 14h08
  4. problème de lecture de é et à dans un fichier xml
    Par taouja dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 21/04/2007, 23h43
  5. Problème lecture de nombre dans un fichier en c++
    Par knecmotet dans le forum C++
    Réponses: 1
    Dernier message: 28/10/2004, 15h48

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