[langage C] Probleme while et printf

Résolu
xave4552 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   -  
xave4552 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, voila j'ai un problème en c (je suis débutant) j'ai créer une boucle while et je voudrai afficher le pourcentage d'avencement de celle ci
float test=0.00;
la variable taille et connus (taille d'un fichier fseek(stor,0,SEEK_END); taille = ftell(stor) ;)
je test si le fichier existe
je me replace au debut du fichier fseek(stor,SEEK_SET,0);
et enfin jexecute ma while
int alphaa;
while((alphaa=fread(&entier, sizeof(unsigned char), 1, stor)) != 0){
f +=1;
if (taille > 0 && f > 0 ){
test = (f/taille)*100;
printf("Pourcentage d'avancement est de : %f %% \r", test);
};
et cela m'affiche dans la console sans que le 0.000000 % ne change pendant l'execution de la while
par contre il ce met a 100% a la fin de la while.
J'ai retourner le problème dans tout les sens et je n'y arrive pas quelqu'un pourrait-il m'aider merci.
ps je suis sous linux et je compile avec gcc4.2
A voir également:

5 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
je dirai, là comme ça, problème de type.
test = f/taille*100;
si tu fait une division d'entier, il retourne des entiers. Pour en avoir le coeur net, essai le code suivant à la place :
test = float(f)/float(taille)*100; 
0
xave4552 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention  
 
cela me genere une erreur du type (expected expression before ‘float’)
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Beuh !
où est le souci ? Comprends pas... Test jusqu'à ce que ça compile :
test = float(f)/float(taille)*100.;
test = (float)f/(float)taille*100.;
test = ((float)f)/((float)taille)*100.;
test = (100.*f)/(1.0*taille); // celle là devrais compiler au minimum
0
xave4552 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention  
 
cela ma donné qui ne marche toujours pas
Voiçi le code entier et modifier
de nouvelle variable j'ai tout passer en float
int Fonction(char *buffer,char *pass, char *Cible){
FILE *stor;
stor = fopen(buffer,"rb");
FILE *ecriture;
ecriture = fopen(Cible, "wb");
long taille, i, taille_passe;
float test=0.00;
float iteration = 0.00;
float taille_f = 0.00;
int alphaa, alpha;
int f =0;

unsigned char byte;
unsigned int entier;
char* tableau_byte = NULL;
int* tableau_enier = NULL;

if (stor == 0){
printf("\nJe ne peut pas ouvrir le fichier demander\n"
"Verifier vos droit d'administration\n"
"Verifier que le fichier exister\n");
exit(EXIT_FAILURE);
}
else{
fseek(stor,0,SEEK_END);
taille = ftell(stor) ;
taille_f = ftell(stor) * 1.0;
tableau_byte = malloc((taille) * sizeof(char));
tableau_enier = malloc((taille) * sizeof(int));
if (tableau_byte == NULL) // On vérifie si l'allocation a marché ou pas
{
exit(0); // On arrête tout
}
taille_passe = strlen(pass);
//alpha = taille_passe;
if (strlen(&taille_passe) !=0){
if (taille != -1){
printf("\nLa lecture de la taille du fichier %c a réussie.\nLa taille du fichier est de %i octets",buffer,taille);
printf("\nLa lecture de mise en cache va commencer.\n");
sleep(1);
fseek(stor,SEEK_SET,0);
//Allocation de temp avec la taille du fichier

while((alphaa=fread(&entier, sizeof(unsigned char), 1, stor)) != 0){
//printf("Lecture de l'octet n° %i a pour code hexadecimal : %i \n ",f, byte);
//tableau_enier[f] = entier;
iteration +=1.000;
f = f+ 1;
alpha += 1;
if(alpha >= taille_passe){alpha=0;}
if ( f > 0 ){
test = iteration / taille_f;
printf("Pourcentage d'avancement est de : %f %% sur %i\r", test, taille);

};
};
printf("\nEcriture terminer.\n");
sleep(1);
}
else{
printf("\nLe fichier n'existe pas!");
printf("\n");
}
}
}
fclose(ecriture);
fclose(stor);
return 1;

}
Je ne vois pas ce qui cloche je demande d'afficher le pourcentage d'avancement et cela ne fonctionne pas
0
xave4552 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention  
 
C'est bon j'ai trouver voici le code :
float Calcul_poucentage(float taille_total, float fait){
float pour;
pour = (fait/taille_total) *100;
return pour;
};

while{ et condition etc
printf("Pourcentage d'avancement est de : %.2f %%\r", Calcul_poucentage(taille,f));
}
et cela fonctionne impeccable merci de m'avoir mis sur la piste
Ps je vais réinstaller mon compilateur et ma bib merci a +
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Oui, tu peux passer par une fonction qui va te convertir automatiquement les int en float.
Mais, comme l'a dit char snipeur, un simple cast suffit.

while{ et condition etc
printf("Pourcentage d'avancement est de : %.2f %%\r", (float)f/taille*100);
fflush(stdout);
}

Par ailleurs, n'oublie pas le fflush(stdout).

Et enfin, il n'y a pas besoin de ; après les accolades (comme
Par exemple :
float Calcul_poucentage(float taille_total, float fait){
} //pas besoin de virgule

while ( ...) {
...
} //pas besoin de virgule

Cdlt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xave4552 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention  
 
ok merci
0