PROBLEMA Usare la Tabulazione in C (creare una tabella)

Pubblicità

Dieguitos94

Utente Attivo
Messaggi
368
Reazioni
27
Punteggio
44
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?
 
è 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
 
è 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.
 
Pubblicità
Pubblicità
Indietro
Top