PROBLEMA Usare la Tabulazione in C (creare una tabella)

Dieguitos94

Utente Attivo
221
8
CPU
intel i7 - 6700
Dissipatore
ARCTIC Freezer 7 Pro Rev. 2
Scheda Madre
Msi H170 Gaming M3
Hard Disk
SSD: Samsung 850evo 250 GB + HDD WD Black 1TB
RAM
Corsair Vengeance 2133 Mhz 2x8
Scheda Video
Gigabyte Nvidia GTX 1060 6GB Windforce
Monitor
HP Pavillon x24w
Alimentatore
EVGA Supernova G3 - 550w
Case
NZXT H440 V2
Periferiche
Keyboard: Razer Blackwidow
Sistema Operativo
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?
 

BAT00cent

AYAAAAK!
Staff Forum
Utente Èlite
1,692
812
CPU
Neurone solitario
Dissipatore
Ventaglio azionato a mano
Scheda Madre
Casalinga
RAM
Molto molto volatile
Scheda Video
Binoculare integrata nel cranio
Alimentatore
Pastascituta, pollo e patatine al forno
Internet
Segnali di fumo e/o tamburi
Sistema Operativo
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
221
8
CPU
intel i7 - 6700
Dissipatore
ARCTIC Freezer 7 Pro Rev. 2
Scheda Madre
Msi H170 Gaming M3
Hard Disk
SSD: Samsung 850evo 250 GB + HDD WD Black 1TB
RAM
Corsair Vengeance 2133 Mhz 2x8
Scheda Video
Gigabyte Nvidia GTX 1060 6GB Windforce
Monitor
HP Pavillon x24w
Alimentatore
EVGA Supernova G3 - 550w
Case
NZXT H440 V2
Periferiche
Keyboard: Razer Blackwidow
Sistema Operativo
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

Discussioni Simili

Hot del momento