Allinea colonne nella funzione printf in C
-
Usa la notazione
%{integer}d
per allineare l’output in C -
Usa la notazione
%*d
per allineare l’output in C -
Usa le notazioni
%*d
e%{int}d
per allineare le colonne nella tabella
Questo articolo mostrerà diversi metodi su come allineare le colonne nella funzione printf
in C.
Usa la notazione %{integer}d
per allineare l’output in C
printf
fa parte della libreria I/O standard e può essere utilizzato per inviare in output una stringa formattata al flusso stdout
. Il flusso stdout
è bufferizzato; pertanto, potrebbero verificarsi ritardi se la stringa non include un carattere di nuova riga. Di solito, la stringa data non verrà stampata fino a quando il buffer interno non viene riempito; solo dopo quel punto il contenuto viene scritto nel flusso stdout
.
printf
usa gli specificatori di formato che iniziano con il carattere %
per controllare la formattazione della stringa. Oltre ai diversi specificatori per i tipi di dati incorporati, alcuni simboli possono aggiungere varie funzionalità come l’allineamento e il riempimento. In questo caso, inseriamo il numero intero specificato tra i caratteri %
e l’identificatore di formato per indicare il numero di spazi da riempire sul lato sinistro dell’elemento di output. Di conseguenza, possiamo includere lo stesso numero per più output di righe per allineare le voci a destra.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[]) {
int mm1 = 11011;
int mm2 = 111;
int mm3 = 11;
printf("%10d %d\n", mm1, mm1);
printf("%10d %d\n", mm2, mm2);
printf("%10d %d\n", mm3, mm3);
exit(EXIT_SUCCESS);
}
Produzione:
11011 11011
111 111
11 11
Usa la notazione %*d
per allineare l’output in C
In alternativa, la stessa formattazione può essere ottenuta usando la notazione %*d
, che richiede inoltre che venga fornito il numero intero come sono gli argomenti dei dati - dopo la virgola. Tuttavia, se gli specificatori di formato multipli includono il carattere %
, devono includere tutti un valore intero separato prima dell’argomento corrispondente.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[]) {
int mm1 = 11011;
int mm2 = 111;
int mm3 = 11;
printf("%*d %d\n", 10, mm1, mm1);
printf("%*d %d\n", 10, mm2, mm2);
printf("%*d %d\n\n", 10, mm3, mm3);
exit(EXIT_SUCCESS);
}
Produzione:
11011 11011
111 111
11 11
Usa le notazioni %*d
e %{int}d
per allineare le colonne nella tabella
Infine, possiamo combinare entrambi i metodi in diversi scenari e allineare le colonne in qualsiasi output di tabella testuale. Si noti che a volte è necessario che le voci di colonna siano allineate a sinistra. Possiamo ottenerlo inserendo valori interi negativi tra gli specificatori di formato o passandoli come argomenti con la notazione %*d
. Quest’ultima soluzione è più adatta quando il riempimento non è noto come costante e può essere calcolato dinamicamente durante il runtime.
#include <stdio.h>
#include <stdlib.h>
#ifndef MAX
#define MAX 10
#endif
int main(int argc, char const *argv[]) {
char *row1[] = {"num", "name", "sum"};
int col1[] = {1, 2, 3};
char *col2[] = {"one", "two", "three"};
int col3[] = {1243, 14234, 3324};
printf("%*s | %*s | %*s\n", -3, row1[0], -MAX, row1[1], MAX, row1[2]);
printf("%*c | %*c | %*c\n", -3, '-', -MAX, '-', MAX, '-');
size_t len = sizeof col1 / sizeof col1[0];
for (int i = 0; i < len; ++i) {
printf("%-3d | %-10s | %10d\n", col1[i], col2[i], col3[i]);
}
exit(EXIT_SUCCESS);
}
Produzione:
num | name | sum
- | - | -
1 | one | 1243
2 | two | 14234
3 | three | 3324
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook