zedis a écrit 5 commentaires

  • [^] # Re: base de la programmation

    Posté par  . En réponse au message Question pour C gourou !. Évalué à 1.

    Merci pour ton post, c'est super constructif, j'ai appris plein de trucs !

    Dans mes fichiers, les données sont toujours exactement les memes. Donc pour fgets ca ne doit pas poser de problemes pratiques normalement, idem pour sscanf (ceci dit merci d'avoir soulevé le probleme potentiel).

    Merci également d'avoir d'expliqué pourquoi
    struct enreg x[1000000]
    posait problème ; j'ai trouvé la solution hier soir, mais j'ai pas vraiment compris pourquoi ; ton explication éclaire tout maintenant.

    fct(&x[100000]) est effectivement faux, mais si je fais fct(x), j'envoie une copie de la structure et non un pointeur non ?

    Il y a quelque chose qui m'échappe là (sur comment faire pour envoyer un pointeur dans une fonction et travailler avec).

    Merci !
    Zed.
  • [^] # Re: base de la programmation

    Posté par  . En réponse au message Question pour C gourou !. Évalué à 1.

    Merci à tous ceux qui ont répondu, c'est quand meme cool de voir qu'on peut encore demander de l'aide !!!

    Bon, j'ai résolu en partie mon problème : pour la mémoire, l'allocation d'un tableau de 100000 lignes est effectivement beaucoup trop gros. En passant par malloc, ca marche nettement mieux.

    Par contre pour la structure personne n'a vraiment répondu à la question : comment on fait pour passer un pointeur sur une structure à une fonction, de sorte qu'on puisse l'utiliser au sein de la fonction (comme ça idéalement je pourrais remplir ma structure depuis une fonction ce qui simplifirai pas mal mon code...).

    Sinon quelqu'un a une idée de comment on crée un tableau dans lequel je pourrai mettre mes structures (rappel : pour l'instant une structure = 1 fichier, et il me reste 998 fichiers à lire et a charger en mémoire)...

    Merci !
    Zed
  • [^] # Re: base de la programmation

    Posté par  . En réponse au message Question pour C gourou !. Évalué à 1.

    Ca marche déjà un peu mieux !

    Il me reste 2 erreurs que j'essaye de résoudre :
    - sous Linux, impossible de compiler en apportant les modifications conseillées, gcc me retourne "tow or more data types in declaration of fct"... l'erreur étant à la ligne de la déclaration de la fonction fct

    - Je passe sous visual C++ et là ca compile, mais ca plante lorsque le tableau dépasse 10000 lignes... j'augmentes logiquement le nombre de lignes 30000 et ca plante sans raison valable.

    Grrrr..

    Pour le "(s+i)->v = v " j'avais lu quelque part qu'il fallait utiliser cette notation pour travailler sur des pointeurs de trableaux de structures. En utilisant s[x].heure je croyais qu'on travaillait sur les valeurs directement et non sur l'adresse de la variable.

    Il me reste encore du taf pour maitriser les pointeurs (ne me jettez pas la pierre j'ai lu pas mal de bouquins sur le passage de pointeurs de tablaux de structures dans une fonction, et c'est dur de trouver des infos a ce sujet).
  • [^] # Re: base de la programmation

    Posté par  . En réponse au message Question pour C gourou !. Évalué à 1.

    Merci pour tout ces conseils, mais toujours impossible de résoudre le problème...

    La solution proposée par imalip, j'ai essayé aussi, mais sans résultat.
    L'idée était de passer en argument à la fonction qui récupère les données un pointeur sur la structure de sorte que la fonction la remplisse. Etant relativement débutant en C, je me suis cassé la tete (notamment ;-) a essayer de faire en sorte que ça fonctionne ; impossible. Voici le code...

    Si quelqu'un peut me sortir de ce mauvais pas je lui paye une biere !



    #include <stdio.h>


    struct enreg {

    char date[20], heure[20];
    int v;
    float a,b,c,d;
    };


    /*
    * Lit le fichier et enregistre les elements dans une structure data accessible globalement
    *
    */

    void fct(struct enreg *s) {

    char chaine[256], date[20], heure[20];
    int v;
    float a,b,c,d;
    int i=0;

    FILE *fp = fopen("1.txt", "r");

    while(fgets(chaine, sizeof(chaine), fp)) {

    sscanf(chaine, "%s %s %d %f %f", date, heure, &v, &a, &b );
    (s+i)->v = v;
    printf("%d \n", i);
    i++;

    }

    fclose(fp);

    }


    /*
    * Main
    *
    */

    main() {

    struct enreg x[1000000]; // cree la structure x

    // ? ? ? void fct(struct enreg *y);

    fct(&x[1000000]);

    }
  • [^] # Re: base de la programmation

    Posté par  . En réponse au message Question pour C gourou !. Évalué à 1.

    L'idéal serait de tout mettre dans une seule grosse structure, sinon je vois pas comment faire facilement des traitements sur toutes les données.

    Dans ta solution par contre, est-ce qu'on peut accéder à la structure depuis main ?

    Merci !