ragazzi ho un problema con questo programma in c che ho fatto, lo devo presentare domani e sono in alto mare non riesco a superare un errore che mi esce..
il programma è basato sul gioco della briscola.
2 giocatori, 3 carte ciascuno scelte dallo user, lo stesso vale per i semi delle carte e il seme della briscola stessa.
fino all'inserimento dei valori va tutto ok, poi quando chiedo al programma di stamparmi i valori delle carte dei due giocatori, anzichè riportarmi i valori delle carte mi piazza altri numeri... boh... se mi date una mano vi ringrazio già adesso! ciao
PROGRAMMA:
#include<stdio.h>
#include<string.h>
typedef struct {
int seme;
int valorecarta;
}cartadagioco;
// funzione giocatore e carte (3) in suo possesso.
typedef struct{
char nome[4];
cartadagioco carte_mano[3];
}giocatore;
// funzione che stampa il giocatore e le carte in possesso.
void stampa(giocatore x){
int alfa;
printf("\n\n");
for (alfa = 0; alfa < 4; alfa++) {
printf("%c", x.nome[alfa]);
}
int i;
for(i=0 ;i<3 ;i++){
printf("\n\n%d) %d di %c",i,x.carte_mano[i].valorecarta,x.carte_mano[i].seme); }
}
// funzione che assegna i punteggi alle carte.
int punti (cartadagioco){
cartadagioco x;
if(x.valorecarta==1) { return 11; }
else{
if(x.valorecarta==3) { return 10; }
else{
if(x.valorecarta==10) { return 4; }
else{
if(x.valorecarta==9) { return 3; }
else{
if(x.valorecarta==8) { return 2; }
}}}}}
// funzione vincente per verificare le carte giocate e il vincitore.
int vincente(cartadagioco A, cartadagioco B, int primo, char semebriscola) {
if (A.seme == semebriscola && B.seme != semebriscola) { return 1; }
else { if (B.seme == semebriscola && A.seme != semebriscola) { return 2; }
else { if (A.seme == B.seme) {
if (punti(A) == punti(B)) {
if (A.valorecarta > B.valorecarta) { return 1; }
else { return 2; }
}
else {
if (punti(A) > punti(B)) { return 1; }
else { return 2; }
}
}
else { return primo; }
}}
}
// Main del programma.
int main (){
giocatore A;
giocatore B;
cartadagioco x;
int i,k;
i=0;
k=0;
int a,s;
a=0;
s=0;
char semebriscola;
printf ("\nInserisci il seme della briscola (0=denari, 1=spade, 2=coppe, 3=bastoni): ");
scanf ("%c", & semebriscola);
// Inserisci dati giocatore 1.
printf("\nInserire il nome del giocatore 1 (3 lettere): ");
for (i=0; i<4; i++) {
scanf("%c", &A.nome[i]);
}
for(k=0;k<3;k++){
do
{
printf ("\nInserisci il valore della carta: ");
scanf ("%d",& x.valorecarta);
}
while ((x.valorecarta<1)||(x.valorecarta>10));
do
{
printf ("\nInserisci il seme (0=denari, 1=spade, 2=coppe, 3=bastoni): ");
scanf ("%d",&x.seme);
}
while ((x.seme!=0)&&(x.seme!=1)&&(x.seme!=2)&&(x.seme!=3 ));
if (x.seme==0) {
printf ("\n\n * %d di denari *\n\n", x.valorecarta); }
else { if (x.seme==1) {
printf ("\n\n * %d di spade *\n\n", x.valorecarta); }
else { if (x.seme==2) {
printf ("\n\n * %d di coppe *\n\n", x.valorecarta); }
else { if (x.seme==3) {
printf ("\n\n * %d di bastoni *\n\n ", x.valorecarta); }
}}}
}
// Inserisci dati giocatore 2.
printf("\nInserire il nome del giocatore 2 (3 lettere): ");
for (a=0; a<4; a++) {
scanf("%c", &B.nome[a]);
}
for(s=0;s<3;s++){
do
{
printf ("\nInserisci il valore della carta: ");
scanf ("%d",& x.valorecarta);
}
while ((x.valorecarta<1)||(x.valorecarta>10));
do
{
printf ("\nInserisci il seme (0=denari, 1=spade, 2=coppe, 3=bastoni): ");
scanf ("%d",&x.seme);
}
while ((x.seme!=0)&&(x.seme!=1)&&(x.seme!=2)&&(x.seme!=3 ));
if (x.seme==0) {
printf ("\n\n * %d di denari *\n\n", x.valorecarta); }
else { if (x.seme==1) {
printf ("\n\n * %d di spade *\n\n", x.valorecarta); }
else { if (x.seme==2) {
printf ("\n\n * %d di coppe *\n\n", x.valorecarta); }
else { if (x.seme==3) {
printf ("\n\n * %d di bastoni *\n\n ", x.valorecarta); }
}}}
}
// Partita di briscola.
int cartagiocata[3];
int h;
h=0;
stampa(A);
stampa(B);
for(h=0;h<3;h++){
printf("\n\nQuale carta vuoi giocare, %c? ", A.nome[i]);
scanf("%d",&cartagiocata[1]);
printf("quale carta scegli, %s? ", B.nome);
scanf("%d",&cartagiocata[2]);
if (vincente(A.carte_mano[cartagiocata[1]], B.carte_mano[cartagiocata[2]], 1, semebriscola) == 1) { printf("vince %s", A.nome); }
else { printf("vince %s", B.nome); }}
}