2009-06-16 5 views

risposta

43

It's used to specify, in a dynamic way, what the width of the field is:

  • La larghezza non è specificato nella stringa di formato, ma come ulteriore argomento value intero precedente la argomento che deve essere formattato.

così "trattino" specifica la quantità di spazio da allocare per la stringa che lo segue nella lista dei parametri.

Quindi,

printf("%*s", 5, ""); 

è lo stesso di

printf("%5s", ""); 

E 'un bel modo per mettere alcuni spazi nel file, evitando un ciclo.

+0

Grazie per il chiarimento. Ho cercato un po 'su google ma non ho trovato la risposta. – Aamir

+0

Non riesco a farlo funzionare con sscanf –

+3

@EthanHeilman, il * indica qualcosa COMPLETAMENTE diverso nella famiglia di funzioni scanf. –

0

* Fa sì che fprintf copi l'output finché non è largo n caratteri, dove n è un valore intero memorizzato nell'argomento di una funzione appena precedente a quello rappresentato dal tipo modificato.

printf("%*d", 5, 10) //will result in "10" being printed with a width of 5. 
7

Non utilizzare "% * s" su un buffer che non è terminato NULL (impacchettato) pensando che stamperà solo il campo "lunghezza".

+10

Usa "%. * S" per raggiungere questo obiettivo! –

0

L'identificatore di formato% 4s emette una stringa in una larghezza di campo di 4, ovvero, printf visualizza il valore con almeno 4 posizioni di carattere.

Se il valore da produrre è less di larghezza di 4 caratteri, il valore è right justified nel campo per impostazione predefinita.

Se il valore è greater di larghezza superiore a 4 caratteri, la larghezza del campo expands può contenere il numero appropriato di caratteri.

Per giustificare a sinistra il valore, utilizzare un numero intero negativo per specificare la larghezza del campo.

Riferimenti: Java™ How To Program (Early Objects), Tenth Edition