Il %*d
in printf
consente di utilizzare una variabile per controllare l'ampiezza del campo, lungo le linee di:
int wid = 4;
printf ("%*d\n", wid, 42);
che vi darà:
..42
(con ciascuno di quelli 0.123.caratteri essendo uno spazio). Il *
consuma un argomento wid
e la d
consuma il 42
.
La forma si dispone, come:
printf ("%*d %*d\n", a, b);
è un comportamento indefinito come da standard, in quanto si dovrebbe essere fornendo quattro argomenti dopo la stringa di formato, non due (e buoni compilatori come gcc
vi dirà a questo proposito se si alza il livello di avviso). Da C11 7.20.6 Formatted input/output functions
:
Se non ci sono argomenti sufficienti per il formato, il comportamento non è definito.
Dovrebbe essere qualcosa di simile:
printf ("%*d %*d\n", 4, a, 4, b);
E la ragione che stai ricevendo l'uscita strana è dovuto a che un comportamento indefinito. This excellent answer mostra il tipo di cose che possono andare storte (e perché) quando non si seguono le regole, in particolare relative a questa situazione.
Ora non mi aspetto che questo sia un problema di disallineamento dal momento che si sta utilizzando int
per tutti i tipi di dati, ma, come per tutti un comportamento indefinito, nulla può accadere.
Sembra un identificatore di larghezza: http://www.cplusplus.com/reference/clibrary/cstdio/printf/ – Mysticial
@Mysticial Dovresti scrivere quello come risposta .. – Ben
@Ben, è solo un collegamento - che non si qualificano come una risposta. Sono troppo pigro per ampliarlo ... – Mysticial