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 :

Copie tableau à tableau


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut Copie tableau à tableau
    Hello tout le monde,
    Voila les intentions :
    • lire chaque ligne d'un fichier et en extraire 3 floats
    • retourner ces 3 floats dans un tableau
    • puis les stocker dans un autre tableau beaucoup plus grand


    Le prob survient au moment ou je copie les floats du petit tableau au plus grand : les valeurs ne passent pas, j'obtiens du chenis.
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    #define FILENAME_LENGTH 100
    #define LINE_MAXLENGTH 100
    #define VERTICES_LENGTH 10000
    #define FACES_LENGTH 10000
     
    int main(void) {
    	char fileName[FILENAME_LENGTH];
    	double vertices[VERTICES_LENGTH];
    	int faces[FACES_LENGTH];
     
    	promptFileName(fileName);
     
    	readObjFile(fileName, vertices, faces);
    	return 0;
    }
     
    void readObjFile(char* fileName, double* vertices, int* faces){
    	FILE* infile;
    	char line[LINE_MAXLENGTH];
    	int vertices_counter = 0;
    	int faces_counter = 0;
     
    	if((infile = fopen(fileName, "r")) == NULL) {
    		printf("Error Opening File.\n");
    		exit(1);
    	}
    	printf("parsing du fichier... (%s)\n", fileName);
     
    	while( fgets(line, LINE_MAXLENGTH, infile) != NULL ) {
    		if(line[0] == 'v'){
    			double* vert = getVertices(line);
    			printf("contenu de vert : %lf %lf %lf\n", vert[0], vert[1], vert[2]); // affiche les bonnes valeurs
    			for(int i = 0; i < 3; i++){
    				vertices[vertices_counter] = vert[i]; // ceci ne fonctionne pas
    				vertices_counter++;
    			}
    		}
    		else if(line[0] == 'f'){
    			//int* faces = getFaces(line);
    		}
    	}
     
    	fclose(infile);
    	printf("End of parsing\n");
    }
     
    double* getVertices(char* line){
    	double vert[3];
    	int i = 0;
    	while(line[i] == 'v' || issep(line[i])){
    		i++;
    	}
     
    	char res[20];
    	int pos = 0;
    	do{
    		res[pos] = line[i];
    		pos++;
    		i++;
    	}
    	while(!issep(line[i]) && line[i] != '\n');
     
    	res[pos] = '\0';
    	vert[0] = atof(res); // string -> double
    	printf("1er vertice est : %lf\n", vert[0]);
     
    	// second vertex
    	i++;
    	pos = 0;
    	do{
    		res[pos] = line[i];
    		pos++;
    		i++;
    	}
    	while(!issep(line[i]) && line[i] != '\n');
    	res[pos] = '\0';
    	vert[1] = atof(res);
    	printf("2e vertice est : %lf\n", vert[1]);
     
    	// third vertex
    	i++;
    	pos = 0;
    	do{
    		res[pos] = line[i];
    		pos++;
    		i++;
    	}
    	while(!issep(line[i]) && line[i] != '\n');
    	res[pos] = '\0';
    	vert[2] = atof(res);
    	printf("3e vertex est : %lf\n", vert[2]);
     
    	return vert;
    }
    Tout compile. Ah et j'ai remarqué que si je ne fais pas le printf où il affiche les bonnes valeurs, le résultat n'est pas le même dans le tableau vertices (il ne se compose que d'une valeur, qui est approximativement ce que j'attends pour la 1ere)
    Est-ce que j'ai loupé quelque chose au niveau des pointeurs/tableau ?
    J'ai joint le fichier que je parse (un fichier .obj d'essai (renommé en .c car .obj non accepté dans le forum))

    A noter que je suis au courant que ce code n'est pas élégant du tout, ça devrait être qu'une bricole à faire à la base...
    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Primo, tu retournes une adresse LOCALE (getVertices) dans la routine appelante...

    Fais simplement :


    dans readObjFile déclare :
    double vert[3] ;

    dans getVertices ajoute un paramètre double *Vertex, et affecte les valeurs directement....

    Secondo, enlèves tes déclarations de variables A L'INTERIEUR du code.....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	double vert[3];
    	int i = 0;
    	while(line[i] == 'v' || issep(line[i])){
    		i++;
    	}
     
    	char res[20];
    	int pos = 0;
    beurkkk..

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    Ok merci ça marche avec tes modifs
    Mais j'ai pas bien compris pourquoi ça ne fonctionnait pas comme j'ai fait avant? Tu peux m'éclaircir sur l'histoire du locale ? Merci encore

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par seb-oulba
    Ok merci ça marche avec tes modifs
    Mais j'ai pas bien compris pourquoi ça ne fonctionnait pas comme j'ai fait avant? Tu peux m'éclaircir sur l'histoire du locale ? Merci encore
    L'espace mémoire de la variable vert, définie à la première ligne de la fonction getVertices() et retournée par cette fonction, est alloué sur la pile. Cela signifie que vert est local à getVertices et que l'espace mémoire correspondant est libéré lorsque ont sort de la fonction. Ainsi, getVertices retourne l'adresse d'un double, mais cette adresse est désormais invalide.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Par défaut
    D'accord merci beaucoup!

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

Discussions similaires

  1. Copie un tableau dans un autre
    Par Montor dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/05/2008, 21h29
  2. redimenssionnement & copie de tableau
    Par TOPGUN89 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 24/09/2007, 14h45
  3. Format des surfaces et copies vers tableau
    Par ultimanu dans le forum DirectX
    Réponses: 7
    Dernier message: 12/04/2007, 16h33
  4. Copie de tableau dynamique Tridimensionel
    Par Zenol dans le forum C++
    Réponses: 23
    Dernier message: 19/12/2005, 16h00
  5. [Tableau]Problèmes avec copie de tableau
    Par Itachi-san dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 17h23

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