[langage C] Probleme while et printf
Résolu/Fermé
xave4552
Messages postés
53
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
24 février 2018
-
18 mars 2009 à 09:43
xave4552 Messages postés 53 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 24 février 2018 - 18 mars 2009 à 18:16
xave4552 Messages postés 53 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 24 février 2018 - 18 mars 2009 à 18:16
A voir également:
- [langage C] Probleme while et printf
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Débuter langage batch windows - Guide
5 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
18 mars 2009 à 09:52
18 mars 2009 à 09:52
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 = 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;
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
18 mars 2009 à 10:25
18 mars 2009 à 10:25
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
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
xave4552
Messages postés
53
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
24 février 2018
18 mars 2009 à 13:11
18 mars 2009 à 13:11
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
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
xave4552
Messages postés
53
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
24 février 2018
18 mars 2009 à 13:26
18 mars 2009 à 13:26
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 +
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 +
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
18 mars 2009 à 14:14
18 mars 2009 à 14:14
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.
Par ailleurs, n'oublie pas le fflush(stdout).
Et enfin, il n'y a pas besoin de ; après les accolades (comme
Par exemple :
Cdlt
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
xave4552
Messages postés
53
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
24 février 2018
18 mars 2009 à 18:16
18 mars 2009 à 18:16
ok merci
18 mars 2009 à 10:10