PROBLEMA Usare la Tabulazione in C (creare una tabella)

Dieguitos94

Utente Attivo
268
11
CPU
intel i7 - 6700
Dissipatore
ARCTIC Freezer 7 Pro Rev. 2
Scheda Madre
Msi H170 Gaming M3
HDD
SSD: Samsung 850evo 250 GB + HDD WD Black 1TB
RAM
Corsair Vengeance 2133 Mhz 2x8
GPU
Gigabyte Nvidia GTX 1060 6GB Windforce
Monitor
HP Pavillon x24w
PSU
EVGA Supernova G3 - 550w
Case
NZXT H440 V2
Periferiche
Keyboard: Razer Blackwidow Chroma
OS
Windows 10
Salve a tutti!
Ho scritto un programma in C per un compito che simula un gioco a puntate dove vince chi ottiene la somma dei dadi più alta. Ad ogni turno volevo, per semplificare la vita a chi lo sta leggendo,
impostare una tabella con le puntate di tutti i giocatori con il rispettivo ammontare di soldi puntati.
Come da titolo, tuttavia, sto avendo qualche problema con la formattazione del testo.
L'idea di base dovrebbe essere una roba di questo tipo:

TURNO1:

GIOCATORE LANCIODADI PUNTATA

Giocatore1 5 20€
GIocatore2 12 40€

TURNO2:

ecc.
PS: Dalla preview vedo che la formattazione non viene mantenuta, in ogni caso dovrebbe essere una tabella dove tutti gli elementi sono allineati (i valori 5 e 12 sono sotto la "casella" LANCIODADI e i valori 20 e 40 sono sotto la "casella" PUNTATA).


Qualcuno mi può dare qualche dritta?
Ho provato ad usare un format di questo tipo:
C:
printf ("Turno %d\n",turno);
printf ("GIOCATORE\tLANCIODADI\tPUNTATA\t\n");
printf ("$d\t$d\t$d",giocatore,dadi,puntata);

ma non sembra funzionare per niente bene.
Cosa mi consigliate di fare?
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,668
11,452
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
è ovvio che non funziona, ti viene tutto disallineato se operi in quel modo, devi (ri)studiare le opzioni di formattazione della funzione printf
Tu stai stampando degli interi, probailmente da poche cifre ciascuno, per esempio vuoi stampare un "1" sotto la parola "Giocatore" per indicare il giocatore 1, giusto?
ma il numero 1 occupa un solo carattere, quindi ti viene stampato sotto la G di "giocatore"; se ci metti una tabulazione, le cifre che rappresentano il lancio di dati ti finiscono di nuovo sotto "giocatore" perché un tab mediamente è di pochi spazi.
Quello che devi fare è "fissare" una larghezza, per esempio la parola "Giocatore" ha 9 caratteri, quindi ti conviene stampare il numero che corrisponde ad un giocatore in modo che occupi 9 caratteri. Guarda come esempio cosa succede con questo codice:
C:
int puntata = 10;
int giocatore = 1;
int dadi = 6;
printf("Giocatore\tdadi\tpuntata\t\n");
printf("%9d\t", giocatore);
printf("%4d\t", dadi);
printf("%7d\t", puntata);
in pratica printf("%Nd") dove N è un numero intero, ti stampa un intero in modo che occupi N caratteri, quindi printf("%4d") stampa un int in modo che occupi 4 caratteri. Giocando un po' con lunghezze e dimensioni vedrai che risolvi
 

Dieguitos94

Utente Attivo
268
11
CPU
intel i7 - 6700
Dissipatore
ARCTIC Freezer 7 Pro Rev. 2
Scheda Madre
Msi H170 Gaming M3
HDD
SSD: Samsung 850evo 250 GB + HDD WD Black 1TB
RAM
Corsair Vengeance 2133 Mhz 2x8
GPU
Gigabyte Nvidia GTX 1060 6GB Windforce
Monitor
HP Pavillon x24w
PSU
EVGA Supernova G3 - 550w
Case
NZXT H440 V2
Periferiche
Keyboard: Razer Blackwidow Chroma
OS
Windows 10
è ovvio che non funziona, ti viene tutto disallineato se operi in quel modo, devi (ri)studiare le opzioni di formattazione della funzione printf
Tu stai stampando degli interi, probailmente da poche cifre ciascuno, per esempio vuoi stampare un "1" sotto la parola "Giocatore" per indicare il giocatore 1, giusto?
ma il numero 1 occupa un solo carattere, quindi ti viene stampato sotto la G di "giocatore"; se ci metti una tabulazione, le cifre che rappresentano il lancio di dati ti finiscono di nuovo sotto "giocatore" perché un tab mediamente è di pochi spazi.
Quello che devi fare è "fissare" una larghezza, per esempio la parola "Giocatore" ha 9 caratteri, quindi ti conviene stampare il numero che corrisponde ad un giocatore in modo che occupi 9 caratteri. Guarda come esempio cosa succede con questo codice:
C:
int puntata = 10;
int giocatore = 1;
int dadi = 6;
printf("Giocatore\tdadi\tpuntata\t\n");
printf("%9d\t", giocatore);
printf("%4d\t", dadi);
printf("%7d\t", puntata);
in pratica printf("%Nd") dove N è un numero intero, ti stampa un intero in modo che occupi N caratteri, quindi printf("%4d") stampa un int in modo che occupi 4 caratteri. Giocando un po' con lunghezze e dimensioni vedrai che risolvi
Esattamente! L'unica cosa è che in realtà non ci sarà "1,2,3" ma tipo dei nomi comuni (Marco, Francesca, Alberto ecc). In ogni caso questo risolve completamente il mio problema, grazie mille domani provo e in caso rispondo ancora in questo post se avessi dei dubbi in merito.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!