PDA

Visualizza la versione completa : Pillola: [C] La funzione printf()


lucasp
26-05-2002, 10:25
In C, il flusso di output viene regolato dalla funzione printf().Qui di seguito vedremo come funziona

Prototipo della funzione


int printf(const *stringa_controllo,...);


Ecco di seguito gli specificatori di printf():

%c -> carattere
%d -> interi decimali con segno
%i -> interi decimali con segno
%f -> numero decimale in virgola mobile
%s -> stringa di caratteri
%u -> interi decimali senza segno
%p -> visualizza un puntatore
%% -> stampa il carattere %
%c ->visualizza un solo carattere

Esempio:


printf("Mi piacie molto %s il %c", "studiare","C");

Andrea Simonassi
27-05-2002, 13:33
printf("Mi piace molto %s il %c", "studiare","C");
c'è un errorino. La chiamata dovrebbe essere:

printf("Mi piace molto %s il %c", "studiare",'C');
con gli apici singoli sui char.

A parte questa inezia, la printf è davvero una funzione utilissima, non solo in C ma anche in C++, in sostituzione di ostream, grazie alla sua grande flessibilità.

Allora già che lucasp vi ha descritto la printf aggiungo una considerazione anch'io: la printf prende un numero arbitrario di parametri dopo la stringa di formattazione.

Il prototipo di printf è
int printf(char* ftm, ...);

i tre puntini indicano che può ricevere n parametri a run-time.

Ad esempio scriviamo una funzioncina che prende come argomento una lista di uno o più interi e li stampa in output finchè nella lista dei parametri non trova -1. Per fare ciò è necessario includere uno header file <stdarg.h> che incorpora varie macro per accedere ai parametri senza nome.

ATTENZIONE: il compilatore non controlla i tipi dei parametri '...'.
Può essere più forte come vincolo passare un vero e proprio array, anche se meno flessibile.


#include <stdarg.h>
#include <stdio.h>

int printint(int first, ...)
{
int i;
int count=0;
va_list list;
va_start(list,first); //inizializzazione
i=first;
while( i != -1 )
{
++count;
printf("%d\n", i);
i = va_arg( list, int); //argomento successivo di tipo int
}
va_end( list );
return count;
}

int main()
{
printint(2,4,6,33,67665,1232,-1);
return 0;
}

lucasp
27-05-2002, 14:43
Grazie per le correzioni e le aggiunte!

P.S: ma sta idea delle pillole ti sebmra stupida??

Andrea Simonassi
27-05-2002, 14:48
Al contrario, la reputo un'ottima idea, così uno che incomincia col C/C++ può avere maggiori spunti di riflessione e di studio.

lucasp
27-05-2002, 14:55
Originariamente inviato da Andrea Simonassi
Al contrario, la reputo un'ottima idea, così uno che incomincia col C/C++ può avere maggiori spunti di riflessione e di studio.

Ne scriveresti una anche tu??????

P.S: ma la mia sulle classi la hai letta???? cosa ne pensi?

Andrea Simonassi
27-05-2002, 15:00
"C" penserò, adesso sono in un periodo nero tra studio, lavoro, e incombenze varie (sto ristrutturando la casa).

Entro settembre sicuramente.

PS:
Ora leggo la tua pillola.

Luc@s
17-01-2003, 20:45
Originariamente inviato da Andrea Simonassi
"C" penserò, adesso sono in un periodo nero tra studio, lavoro, e incombenze varie (sto ristrutturando la casa).

Entro settembre sicuramente.

PS:
Ora leggo la tua pillola.

settembre è passato e tu nn hai scritto nulla:bhò:


Ora poi?



:ciauz: :ciauz:

standard
17-01-2003, 21:00
bellissima l'iniziativa!!!!

Invito qualcuno più esperto di me a continuare questa pillola
spiegando le possibilità di formattazione della printf, ad es:



printf("un intero: %3d e un decimale %2.3f",2,1.5)


ah...poi forse c'è un errore:


%d -> interi decimali con segno
%i -> interi decimali senza segno


giusto?

Luc@s
17-01-2003, 21:04
Originariamente inviato da standard
bellissima l'iniziativa!!!!


Tnk

Originariamente inviato da standard
ah...poi forse c'è un errore:


giusto?

giusto

Andrea Simonassi
18-01-2003, 02:09
Originariamente inviato da Luc@s
settembre è passato e tu nn hai scritto nulla:bhò:


Ora poi?



:ciauz: :ciauz:

Provveduto


http://forum.html.it/forum/showthread.php?s=&threadid=384344

Loading