Langage C: écriture dans un fichier

Fermé
Sportif_C - 24 févr. 2012 à 21:08
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 26 févr. 2012 à 13:59
Bonjour,

Je suis entrain d'écrire un programme qui permet de lister toutes les combinaisons possibles avec 3 numéros. Pour ça j'ai utilisé une méthode récursive.
J'ai un petit souci: c'est a quelle moment je dois fermer mon fichier! En fait, je voudrais écrire les résultants dans un fichier texte "CombinationsFile.txt". Chaque combinaison est sur une ligne.
J'ai un petit souci:je ne sais pas à quelle moment je dois fermer mon fichier!
Quelqu'un pourrait-il m'aider?
Merci.



void combinaisons(int n, int p, int k, int *L, int *t, int r) {
	int i, j, j1, t2[n];
	CombinationsFile=fopen("Combinations.txt","w");
     if(CombinationsFile==NULL)
     {
          printf("Failed to open  Combinations file, quitting!\n");
          exit(1);
     }

	if(r<p-k) return;
	if(k==p) {
		for(i=0;i<p;i++) 
		fprintf(CombinationsFile,"%d ", L[i] );
		printf("\n");

		return;
	}

	for(i=0;i<r;i++) {

               L[k] = t[i];

               for(j=i+1, j1=0;j<r;j++, j1++) {
			t2[j1] = t[j];

		}
		combinaisons(n, p, k+1, L, t2, j1);

	}

}
A voir également:

1 réponse

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
25 févr. 2012 à 02:07
tu fermes ton fichier lorsque tu n'en as plus besoin, donc dans ton cas, juste à la fin de ta fonction.
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
Modifié par Pacorabanix le 25/02/2012 à 02:14
pardon, je dis une bêtise bien évidemment.

A cause des appels récursifs, je n'arrive pas à y voir clair, tout comme toi je pense.


une meilleure stratégie, plus *réutilisable* (si tu veux changer le nom du fichier, etc...) et plus pratique dans ce cas, serait de mettre CombinationsFile=fopen("Combinations.txt","w");
dans le main, ou autre fonction qui appelle celle que tu nous montres, et passer cette variable en *paramètre* en plus pour ta fonction récursive.

Ainsi tu ouvres le fichier avant d'appeler la première fois ta fonction, tu transmets le descripteur par argument, et tu fermes le fichier après l'appel initial.
0
Merci pour ta réponse.
J'ai fais comme tu m'as demandé(enfin je pense). mais ça marche pas.Pourrais-tu STP essayer d'exécuter le programme et me dire ce que tu en penses?Merci encore.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE * CombinationsFile;

void combinaisons(FILE *CombinationsFile, int *ens, int *combinaison, int n, int p, int i, int t, void (*func)(int*,int) ) {
    if (i<p) {
        int k;
        for (k=t; k<n; k++) {
            combinaison[i] = ens[k];
            combinaisons(CombinationsFile,ens,combinaison,n,p,i+1,k+1,func);
        }
    }
    else {
        func(combinaison,p);


    }
}

void afficher( int *p, int n) {
  int i;
  for (i = 0; i < n; i++) printf("%d ", p[i]);
  printf("\n");
}



int main() {
  int ens[] = {1,2,3,4,5,6};
  int combi[4];
  CombinationsFile=fopen("Combinations.txt","w");
     if(CombinationsFile==NULL)
     {
          printf("Failed to open  Combinations file, quitting!\n");
          exit(1);
     }

     combinaisons(CombinationsFile, ens,combi,6,4,0,0,afficher);
     fclose(CombinationsFile);
}
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
26 févr. 2012 à 13:58
je ne comprends pas ça :

func(combinaison,p);
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
Modifié par Pacorabanix le 26/02/2012 à 13:59
et la variable :

FILE * CombinationsFile;

je la déclarerais plutot dans le main, juste pour éviter la confusion avec les arguments.
0