IN3R11-2 { CCours 4Damien MASSONd.masson@esiee.frhttp://esiee.fr/ massond/Teaching/IN3R11-2/~22 novembre 2010printfrenvoit le nombre de caracteres a chesretour negatif en cas d’erreurtres rare : sortie redirigee vers un chier et plus de place sur ledisqueles autres cas d’erreur (droits, disque amovibles debranche...)sont geres par le systeme2/21A chage des entiers%d : entier signe%u : entier non signe%o : entier non signe en octal%x %X : entier non signe en hexadecimalint main( int argc , char argv [])fint i= 45,j=43;printf ("%d\n" , i ) ; / 45 /printf ("%u\n" , i ) ; / 4294967251 /printf ("%o\n" , j ) ; / 53 /printf ("%x\n" , j ) ; / 2b /printf ("%X\n" , j ) ; / 2B /return 0;g3/21A chage des reels%f : standard, 6 decimales%g : standard, sans les zeros naux%e %E : notation exponentielleint main( int argc , char argv []) fdouble f=345.575;printf ("%f\n" ,f) ; / 345.575000 /printf ("%g\n" ,f) ; / 345.575 /printf ("%e\n" ,f) ; / 3.455750e+002 /printf ("%E\n" ,f) ; / 3.455750E+002 /return 0;g4/21Formats speciaux%p : a chage en hexadecimal des adresses memoires%n : stocke le nombre de caracteres deja ecritsint main( int argc , char argv []) fint n;double d=458.21;printf ("%g%n" ,d,&n) ; / 458.21=6 chars /printf ("=%d chars\n" ,n) ; / &n=0022FF6C /printf ("&n=%p\n",&n) ;return 0;g5/21le Gabaritentier apres le % = nombre minimum de caracteres a utilisercomplete avec des ...
i n t main ( i n t a r g c , c h a r ∗ a r g v [ ] ) { i n t i = − 45, j =43; p r i n t f ( " % d \ n " , i ) ; / ∗ − 45 ∗ / p r i n t f ( " % u \ n " , i ) ; / ∗ 4 2 9 4 9 6 7 2 5 1 ∗ /
}
p r i n t f ( " % o \ n " , j ) ; / ∗ 53 ∗ / p r i n t f ( " % x \ n " , j ) ; / ∗ 2 b ∗ / p r i n t f ( " % X \ n " , j ) ; / ∗ 2B ∗ / r e t u r n 0 ;
i n t main ( i n t a r g c , c h a r ∗ a r g v [ ] ) { d o u b l e f = 3 4 5 . 5 7 5 ; p r i n t f ( " % f \ n " , f ) ; / ∗ 3 4 5 . 5 7 5 0 0 0 p r i n t f ( " % g \ n " , f ) ; / ∗ 3 4 5 . 5 7 5 p r i n t f ( " % e \ n " , f ) ; / ∗ 3 . 4 5 5 7 5 0 e +002 p r i n t f ( " % E \ n " , f ) ; / ∗ 3 . 4 5 5 7 5 0 E+002 r e t u r n 0 ;
i n t main ( i n t a r g c , c h a r ∗ a r g v [ ] ) { i n t n ; d o u b l e d = 4 5 8 . 2 1 ; p r i n t f ( " % g % n " , d ,& n ) ; / ∗ 4 5 8 . 2 1 = 6 c h a r s ∗ / p r i n t f ( " =% d c h a r s \ n " , n ) ; / ∗ &n =0022FF6C ∗ / p r i n t f ( " & n =% p \ n " ,& n ) ; r e t u r n 0 ;
}
/512
le Gabarit
entierapre`sle%=nombreminimumdecaract`eres`autiliser comple`teavecdesespacessin´ecessaire,oudesz´erossi%0 avant un nombre gabarit!=pre´cision!!
i n t main ( i n t a r g c , c h a r ∗ a r g v [ ] ) { p r i n t f ( " %5 d \ n " , 4 ) ; / ∗ 4 ∗ / p r i n t f ( " %5 d \ n " , 1 2 3 4 5 6 ) ; / ∗ 1 2 3 4 5 6 ∗ / p r i n t f ( " %5 f \ n " , 3 . 1 f ) ; / ∗ 3 . 1 0 0 0 0 0 ∗ / p r i n t f ( " %5 s \ n " , " ab c " ) ; / ∗ a b c ∗ / p r i n t f ( " %0 5 d \ n " , 4 ) ; / ∗ 0 0 0 0 4 ∗ / r e t u r n 0 ; }
6/21
Pre´cision
%.3f:3de´cimales ` le d’arrondi reg compatible avec un gabarit
{
i n t main ( i n t a r g c , c h a r ∗ a r g v [ ] ) d o u b l e f = 3 . 1 4 1 5 9 2 6 5 ; p r i n t f ( " %. 3 f \ n " , f ) ; / ∗ 3 . 1 4 2 p r i n t f ( " % 0 8 . 3 f \ n " , f ) ; / ∗ 0 0 0 3 . 1 4 2 p r i n t f ( " %. 4 e \ n " , f ) ; / ∗ 3 . 1 4 1 6 e +000 r e t u r n 0 ;
}
∗ / ∗ / ∗ /
/712
Gabaritetpr´ecisionvariables
sionnelesconnaıˆtpas`alacompilation:*aulieud’unentier+ variable en argument de printf
i n t main ( i n t a r g c , c h a r ∗ a r g v [ ] ) { i n t i , tmp ; i n t max =0; f o r ( i =0; i < a r g c ; i ++) { tmp= s t r l e n ( a r g v [ i ] ) ; i f ( tmp > max ) max=tmp ; } f o r ( i =0; i < a r g c ; i ++) { p r i n t f ( " ar g #% d =%* s \ n " , i , max , a r g v [ i ] ) ; } r e t u r n 0 ; } / ∗ a r g #0= . / t a r g #1= i s a r g #2= t h e a r g #3=command ∗ /
8/21
Signes des nombres
%+d : force l’affichage du signe % d : met un espace si le signe est un +
i n t main ( i n t a r g c , c h a r ∗ f l o a t f = 1 2 . 5 4 f ; f l o a t g = − 12.54 f ; p r i n t f ( " %+ f \ n " , f ) ; p r i n t f ( " %+ f \ n " , g ) ; p r i n t f ( " % f \ n " , f ) ; p r i n t f ( " % f \ n " , g ) ; p r i n t f ( " % + . 3 f \ n " , f ) ; r e t u r n 0 ; } / ∗ + 1 2 . 5 4 0 0 0 0 − 1 2 . 5 4 0 0 0 0 1 2 . 5 4 0 0 0 0 − 1 2 . 5 4 0 0 0 0 + 1 2 . 5 4 0 ∗ /
a r g v [ ] )
{
9/21
sprintf
Idemqueprintfmais´ecritdansunechaˆınedecaract`essu´ er pposee assez longue. Attentionauxd´ebordements
i n t main ( i n t a r g c , c h a r ∗ a r g v [ ] ) { c h a r ∗ f i r s t n a m e= " J o h n " ; c h a r ∗ l a s t n a m e= " Do e " ; c h a r e m a i l [ 2 5 6 ] ; s p r i n t f ( e m a i l , " % s .% s @ e s i e e . fr " , f i r s t n a m e , l a s t n a m e ) ; p r i n t f ( " e m a i l =% s \ n " , e m a i l ) ; r e t u r n 0 ;
}
012/1
scanf
% ∗ [ cd ... ]:saisirsanssauverler´esultatdansunevariable:
i n t s c a n p o s i t i v e i n t e g e r ( ) { i n t r e s , n= − 1; do { r e s=s c a n f ( " % d " ,& n ) ; i f ( r e s == − 1) r e t u r n − 1; i f ( r e s ==0) { s c a n f ( " %* c " ) ; / ∗ i c i } } w h i l e ( n < 0) ; r e t u r n n ;