Errore programma in C

di il
5 risposte

Errore programma in C

Buongiorno ,
non riesco a capire perché non va il programma

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void valore_carta(int carta);
int estrai_carta();
//int coppia();
void seme_carta(int carta);
void nome_carta(int carta);

int main()
{
    int operazione;

  //srand (time(NULL));

    int valore0;

    do

    {
        printf("\n");
        printf("\n");
        printf("Esame del 24/7/2019\n");
        printf("Scegli cosa vuoi fare:\n");

        printf("\t1 - Estrai una carta dal mazzo\n");
        printf("\t2 - Ricevi una carta e scrivine il valore\n");
        printf("\t3 - Ricevi una carta e scrivine il seme\n");
        printf("\t4 - Ricevi una carta e scrivine il nome (valore e seme)\n");
        printf("\t5 - Estrai più carte e ritorna quante carte hai estratto prima di trovare una coppia\n");
        printf("\t0 - Esci dal programma...\n\n");
        printf("\n");
        printf("Quale operazione desideri effettuare?\n");
        scanf("%d", &operazione);
        getc(stdin);
        printf("\n");

        switch(operazione)
        {
            case 1:
                valore0 = estrai_carta();
                printf("Hai estratto la carta %d\n", valore0);
                break;
            case 2:
                valore_carta(1); printf(" - ");
                valore_carta(2); printf(" - ");
                valore_carta(11); printf(" - ");
                valore_carta(12); printf(" - ");
                valore_carta(13); printf(" - ");
                break;
            case 3:
                seme_carta(1); printf(" "); //
                seme_carta(13); printf(" ");
                seme_carta(14); printf(" ");
                seme_carta(27); printf(" ");
                seme_carta(40); printf(" ");
                break;
            case 4:
                nome_carta(1); printf(" - ");
                nome_carta(14); printf(" - ");
                nome_carta(27); printf(" - ");
                nome_carta(40); printf(" - ");
                break;
            case 0:
                break;
            default:
                printf("Operazione non valida\n");
        }
    }
    while(operazione != 0);

    return 0;
}


/* 1 - Questa funzione deve restituire un valore casuale tra 1 e 52
*/

int estrai_carta()
{
    return (rand() % 52) + 1;
}

/* 2 - Questa funzione deve scrivere a schermo il valore della carta in questo modo:
       1 -> Asso - 2 -> 2 - 3 -> 3....10 -> 10 -> 10 - 11 -> Fante - 12 -> Donna - 13 -> Re
*/
void valore_carta(int carta) //la funzione riceve un numero da 1 a 13 e scrive i valori da Asso a Re
{
    switch(carta)
    {
        case 1:
            printf("Asso");
            break;
        case 11:
            printf("Fante");
            break;
        case 12:
            printf("Donna");
            break;
        case 13:
            printf("Re");
            break;
        default:
            printf("%d", carta);
            break;
    }
}

/* 3 - Questa funzione riceve le carte da 1 a 52 e deve scriverne il seme.
       Le carte sono numerate dalla più piccola alla più grande,
       secondo i semi CUORI, QUADRI, FIORI, PICCHE quindi le carte da 1 a 13
       sono di cuori, da 14 a 26 sono di quadri ecc.
       Quindi hanno i seguenti valori:
       1 -> 1 cuori
       2 -> 2 cuori
       ...
       10 -> 10 cuori
       11 -> Fante cuori
       12 -> Donna cuori
       13 -> Re cuori
       14 -> Asso di quadri
       15 -> 2 quadri
       16 -> 3 quadri
       ...
       ...
       52 -> Re di picche

       SUGGERIMENTO:
            per ottenere il seme si può usare una divisione per 13 e considerare la parte intera
            se è 0 allora il seme è cuori, se è 1 è quadri, ecc.
            per ottenere il valore della carta si può invece usare l'operatore Modulo (per ottenere il resto)

        Per scrivere il valore della carta può essere utile utilizzare la funzione scritta nell'esercizio 2
*/

void seme_carta(int carta) /*riceve una carta (da 1 a 52)
SUGGERIMENTO:
            per ottenere il seme si può usare opportunamente il risultato di una divisione e considerare
            la parte intera: se è 0 allora il seme è cuori, se è 1 è quadri, ecc.*/
{
    int seme;
    seme = (carta -1 ) / 13;
    switch(seme)
    {
        case 0:
            printf(" di cuori");
            break;
        case 1:
            printf(" di quadri");
            break;
        case 2:
            printf(" di fiori");
            break;
        case 3:
            printf(" di picche");
            break;
    }}
    /* commento 4*/


void nome_carta(int carta) /*la funzione riceve il numero della carta (da 1 a 52),
                        questa funzione deve chiamare le due precedenti in
                        modo che esse scrivano il nome completo della carta*/
{
  valore_carta(carta%13);
  seme_carta (carta);
}
sapete mica aiutarmi

5 Risposte

Devi accedere o registrarti per scrivere nel forum
5 risposte