Il prototipo della sprintf è il seguente:allora dalla guida ho capito che "%02d:%02d" è la stringa di formattazione, ma alcune cose non mi sono ancora chiare
" " a cosa servono? a dire che : è un carattere e non un parametro?
% indica l'inizio di una direttiva di conversione
d L'argomento e' convertito a decimale segnato...cioè? che dopo ci saranno dei numeri?
02 non l'ho capito ...è quello che fa diventare ad es 7 in 07?
e poi perche %02d è ripetuto sia prima che dopo il ':'?
Ritorna un valore int che equivale, in caso di successo, al numero di caratteri scritti.codice:int sprintf ( char * str, const char * format, ... );
Richiede:
-Un parametro di tipo puntatore a carattere (char *str), che rappresenta la stringa, sulla quale andrà a scrivere.
-Un parametro di tipo puntatore a carattere costante (const char * format), che è appunto la stringa di formattazione.
-Altri parametri "non determinati" (...)
Per "poter capire" quello che viene effettivamente passato, la sprintf ha bisogno che, il tipo dei dati passati (dopo la stringa di formattazione) sia specificato nella stringa di formattazione.
Per specificare che tipi stai passando, alla funzione, utilizzi le direttive di conversione.
Il carattere % indica l'inizio di una direttiva di conversione.
Mentre il carattere che lo segue, solitamente, il tipo della variabile passata.
Per capirci meglio:
Notare la prima direttiva di conversione (%d) si riferisce al terzo parametro passato alla funzione (la variabile i : d -> intero) mentre la seconda direttiva (%s) si riferisce al quarto parametro (nome: %s ->stinga).codice:[...] char nome[20]; int i; [...] char stringa[30]; sprintf (stringa, "Salve utente numero %d, il tuo nome è %s", i, nome);
Detto questo c'è da fare l'ultima precisazione:
%d è una direttiva di conversione senza alcun flag opzionale.
La struttura di una direttiva di conversione è la seguente:
Quindi, (in %02d) 0 specifica che i caratteri di riempimento saranno degli 0 e non degli spazi, mentre 2 indica che la dimensione minima del valore "stampato" sarà di 2 cifre.% Obbligatorio Indica l'inizio di una direttiva di conversione.
- Flag opzionale Specifica un incolonnamento a sinistra.
+ Flag opzionale Specifica che il segno verra' sempre stampato.
' ' (spazio) Flag opzionale Specifica che verra' stampato o il segno negativo o uno spazio.
0 Flag opzionale Specifica che nelle conversioni numeriche, i caratteri di riempimento saranno 0 (zeri) anziche' spazi.
# Flag opzionale Specifica un formato alternativo per l'output.
Ampiezza Numero opzionale Dimensione minima del campo.
'.' (punto) Opzionale Separa l'ampiezza dalla precisione.
Precisione Numero opzionale
Modificatore Lettera opzionale La lettera h seguita da uno dei caratteri di conversione d, i, u, o, x o X indica che l'argomento e' uno short int o uno unsigned short int.
Il modificatore l (elle) con gli stessi caratteri di conversione, indica che l'argomento e' un long int o uno unsigned long int.
Il modificatore L seguito da uno dei caratteri di conversione e, E, f, g o G indica che l'argomento e' un long double.
Carattere di conversione Lettera obbligatoria Termina la specifica di conversione relativa ad un argomento della lista variabile.
%indica l'inizio e d indica la fine.
La stringa di formattazione per il tuo caso diventa:
"<primo>:<secondo>"
(quindi nella stringa di formattazione ci sono 2 direttive).
dove <primo> e <secondo> sono entrambi uguali alla direttiva %02d
spero di non essere stato confusionario