Jmgr
Messages postés67Date d'inscriptionvendredi 28 décembre 2001StatutMembreDernière intervention23 juin 2015
-
27 janv. 2002 à 18:01
Jmgr
Messages postés67Date d'inscriptionvendredi 28 décembre 2001StatutMembreDernière intervention23 juin 2015
-
28 janv. 2002 à 20:38
Salut,
J'ai fait un programme qui charge toutes les chaines séparées par des espaces, et la boucle for ne se termine jamais, car la dèrnière chaine se lit à l'infini.
MangaII
Messages postés129Date d'inscriptiondimanche 9 décembre 2001StatutMembreDernière intervention12 janvier 2009 27 janv. 2002 à 20:35
Re !
Je ne sais pas ou tu as trouvé ta boucle for avec la comparaison, mais tu ne pourra jms avoir un code qui marche en faisant ca !
Dans le cas d'un fchier, tu ne c pas quelle est sa longueur !
Or, par définition, une boucle FOR se répète un nombre défini de fois ! c pas ce que tu ve !
Comm je te l'ai dit pour l'otre mess, utilise une boucle WHILE !
et pour tester si tu est a la fin du fichier, c'est FEOF
regarde la doc pour ces fonctions, et tu verra que tu va trouver ton bonheur !
A+
NICO !
MangaII
Messages postés129Date d'inscriptiondimanche 9 décembre 2001StatutMembreDernière intervention12 janvier 2009 28 janv. 2002 à 20:32
Salut !
Ton idée est pas con, mais j'ai encore des critiques a faire !
Dans ton code, tu fé 2 boucle, ce qui te fé 2 fois plus de temps !
La première ne sert qu'a vérifier la taille du fichier, et pour ca, y'a des fonctions pour ca !
Par exemple, tu utilise fseek pour déplacer le curseur a la fin du fichier, puis ftell pour savoir a quel nombre d'octets se trouve ton curseur !
Ensuite, si tu connais la taille de ton fichier, alors tu pe utiliser une boucle for !
Tu va dire que je me contredit ! mais pas du tout ! c juste que ton idée consiste a chercher la taille du fichier avant de le copier ! alors que par habitude (et c le cas pour bcp de monde), on utilise le fichier direct, sans regarder sa taille avant !
Je suis fétigué ce soir, mais je vé t'écrire un morceo de code qd mm !
avec ta méthode :
FILE *fp,*fp2;
char tmp; // tu n'a besoin que d'1 char, ne fé pas un tableo
char temp[255];
int count=0,i=0;
fp=fopen("test.txt","r");
fp2=fopen("test.txt","w");
fseek(fp,0,SEEK_END); //place le curseur a la fin du fichier
count=ftell(fp); // récupère le nombre d'octets
fseek(fp,0,SEEK_SET); // replace le cureseur au début du fichier
int n;
{
n = fread(tmp,1,100,fp);
fwrite(tmp,1,n,fp2);
}while ( !feof(fp) );
fclose(fp);
fclose(fp2);
J'ai pas testé ! mais ca doit marcher !
Tu va me demander pk j'utilise un N, et pk j'ai mis le while a la fin !
Pour le N, c juste qu'au lieu de lire 1 seul octet a la fois, j'en lis 100 ! mais comme le fichier n'a pas forcément une taille multiple de 100, la fonction fread, te renvoi le nombre d'octets qu'elle a pu lire ! donc, dans fread, je lui écrit le mm nombre qu'elle a lu ! sinon, c pas bon !
Pour le while a la fin, c juste pour évitre de passer 2 fois le dernier bloc du fichier ! tu verra si tu teste !
j'ai rajouter un B, sur les fopen, pour ouvrir les fichier en binaire, histoire de ne pas être influencé par les caractères autres que alphanumériques !
Voilà !
Fini pour ce soir !
A+
NICO !
PS : amuse toi bien ! j'ai taper tout ca au pif ! alors y'a peut-être des erreurs !
Vous n’avez pas trouvé la réponse que vous recherchez ?