Sprintf [Résolu]

Signaler
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008
-
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008
-
Bonjour a tous,

J'aimerais s'il vous plaît savoir comment est-ce que l'on se sert de g% dans sprintf()
merci de votre reponse

Einstein
Deux choses sont infinies la connerie humaine, et l'univers

22 réponses

Messages postés
15024
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 avril 2021
94
ok. Avec du code, c'est plus facile pour discuter.
2 possibilités:
- soit tu mets a en double, et donc, dans ton print(), il faut utiliser %lf plutôt que %f (je te revoies au lien pour les raisons)
- soit tu le mets en float et tu laisse ton printf tel quel

Remarques:
- char buffer[100]; plutôt que unsigned char
- sleep(100000) --> tu attends 100 secondes!!

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
15024
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 avril 2021
94
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/printf.3.html

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

Rebonjour, je suis desolé, mais je n'ai pas tres bien compris comment est-ce que l'on utilisait sprintf(), encore merci de la reponse
Messages postés
15024
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 avril 2021
94
Tu sais utiliser printf()? Si oui, c'est pareil, mais dans une chaine de caractères.Attention, il faut que ta chaine soit allouée

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

Donc en theorie, si je comptends bien, on peut seulement l'utiliser avec une variable de type char?
merci encore de ta reponse

Einstein
Deux choses sont infinies la connerie humaine, et l'univers
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
salut

char * pas char...
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

desole de te poser cette qusetion, mais c koi al différence(je ne sais pas), merci pr la reponse

Einstein
Deux choses sont infinies la connerie humaine, et l'univers
Messages postés
15024
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 avril 2021
94
char = 1 caractère
char* = pointeur vers chaine de caractères

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Avec printf() le résultat est affiché à l'écran.
Avec sprintf() le résulat est mis dans un buffer sous forme de chaine de caractères.
Il ne s'agit pas de g% mais plutot de %g. Ce  spécificateur est utilisable avec les nombres à virgule flottante ou avec la notation exponentielle. A la différence de %f (ou %e) %g permet de ne prendre en compte que les chiffres utiles d'un nombre. Exemple:
char buffer[100];
float nombre=(float)1/2;
sprintf(buffer,"%f",nombre); // buffer sera "0.500000"
sprintf(buffer,"%g",nombre); // buffer sera "0.5"
Si on veut plus de précision on utilise un double:
double nombre=(double)1/512;
sprintf(buffer,"%.16f",nombre); // buffer sera "0.0019531250000000"
sprintf(buffer,"%.16g",nombre); // buffer sera "0.001953125"
Le .16 devant le spécificateur permet de choisir le nombre maximal de chiffres apès la virgule (ici 16).
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

Je vous remercie beaucoup de votre réponse, je crois que ca ma beaucoup aidé.

Einstein
Deux choses sont infinies la connerie humaine, et l'univers
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

Par contre pour faire apparaitre le buffer, on fait sprintf("%s",buffer); ?
merci de la reponse
Einstein
Deux choses sont infinies la connerie humaine, et l'univers
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
non... sprintf ne s'utilise pas comme ca...

tu veux faire quoi avec ta ligne ?
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

En gros, l'utilisateur donne un nombre(c une partie du programme), et ensuite le programme l'affiche exactement de la même manière, par exemple:
2.3, et le programme affiche 2.3 et non 2.30000000
merci

Einstein
Deux choses sont infinies la connerie humaine, et l'univers
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
si c'est pour l'affichage, pourquoi t'utilises sprintf et pas printf ?
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

dsl, jeme suios gourré je voulais dire printf tout court

Einstein
Deux choses sont infinies la connerie humaine, et l'univers
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

g essaye, mais lorsque je fais printf("%s", buffer);
ca marche pas

Einstein
Deux choses sont infinies la connerie humaine, et l'univers
Messages postés
15024
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 avril 2021
94
Y'a-t-il quelquechose dans buffer?
Je te reposte le lien précédent, pour voir l'usage de la fonction printf()
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/printf.3.html
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

En théorie ui, je fait comme il a été dit, mais j'envoie la partie du programme qui n'est pas du tout terminé:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
int main(int argc, char *argv[])
{ unsigned char buffer[100];
  int i;
  double a;
  printf("donne a:");
  scanf("%f", &a);
  sprintf(buffer,"%g",a);
  printf("%s", buffer);
  sleep(100000);
}
merci encore pr la reponse

Einstein
Deux choses sont infinies la connerie humaine, et l'univers
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

Merci,mais pr le sleep, je ,lavais mis aussi, longtemps pour voir ou était lerreur, c pour ca
en tout cas, merci

Einstein
Deux choses sont infinies la connerie humaine, et l'univers
Messages postés
17
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 décembre 2008

Je te remercie enormément, ca marche impec mtn,
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
int main(int argc, char *argv[])
{ unsigned char buffer[100];
  int i;
  double a;
  printf("donne a:");
  scanf("%lf", &a);
  sprintf(buffer,"%g",a);
  printf("%s", buffer);
  system("PAUSE");
}

Einstein
Deux choses sont infinies la connerie humaine, et l'univers