Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problema con if....
Forum - C/C++ - problema con if....

Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 11:32
Venerdì, 13/06/2008
Salve, ho un piccolissimo problema con gli ultimi due if non mi valutano l'espressione come dovrebbero....sapreste dirmi come mai????....grazie anticipatamente.....ciao.....

Ecco il sorgente:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4.  
  5. #define MAX_CARTE  40
  6.  
  7. typedef struct
  8. {
  9.     char palo;
  10.     int  numero;
  11.  
  12. } Carte;
  13.  
  14.  
  15. typedef struct
  16. {
  17.     Carte vett_carte[MAX_CARTE];
  18.     int num_carte;
  19.  
  20. } CarteNapoletane;
  21.  
  22. /* dichiarazioni di funzioni */
  23. void leggi_da_file(CarteNapoletane *dat);
  24.  
  25. void stampa_a_video(CarteNapoletane dat);
  26.  
  27.  
  28. int main()
  29. {
  30.     CarteNapoletane carte;
  31.  
  32.     leggi_da_file(&carte);
  33.  
  34.     stampa_a_video(carte);
  35.  
  36.     return 0;
  37. }
  38.  
  39. /* definizione della funzione per leggere da file.txt */
  40. void leggi_da_file(CarteNapoletane *dat)
  41. {
  42.     /* dichiarazioni delle variabili */
  43.     FILE *file;              /* lavoro: puntatore al file di input */
  44.     int carte_lette;         /* output: numero delle carte lette */
  45.     dat->num_carte = 0;      /* variabile di tipo puntatore a struttura inizializzata a zero */
  46.  
  47.  
  48.     /* apri il file */
  49.     file = fopen("file.txt", "r");
  50.  
  51.     /* prima lettura: assegna a chiavi_lette fscanf */
  52.     carte_lette = fscanf(file,"%d%c", &dat->vett_carte[dat->num_carte].numero,
  53.                                       &dat->vett_carte[dat->num_carte].palo);
  54.  
  55.  
  56.  
  57.     /* cicla gli studenti che hanno effettivamente le chiavi cognome matricola e voto */
  58.     while(carte_lette == 2)
  59.     {
  60.         dat->num_carte++;  /* scorrimento di tutti gli studenti presenti nel database */
  61.  
  62.         /* seconda lettura: leggi nuovamente da file */
  63.         carte_lette = fscanf(file,"%d%c", &dat->vett_carte[dat->num_carte].numero,
  64.                                           &dat->vett_carte[dat->num_carte].palo);
  65.  
  66.  
  67.     }
  68.  
  69.     /* chiudi i file */
  70.     fclose(file);
  71.  
  72. }
  73.  
  74. /* definizione di funzione di scrittura a video */
  75. void stampa_a_video(CarteNapoletane dat)
  76. {
  77.     /* dichiarazioni delle variabili */
  78.     FILE *file;               /* lavoro: puntatore al file di output */
  79.     int i, j, k;                    /* indice di scorrimento ciclo for */
  80.     Carte temp;
  81.     char nome_giocatore[30];  /* nome del giocatore */
  82.     int butta_tu;             /* carta pescata che decide chi iniziare */
  83.     int scelta;              /* carte che butta l'utente */
  84.  
  85.     /* MENU */
  86.     /* acquisire nome giocatore */
  87.     printf("\nNome giocatore\n");
  88.     scanf("%s",
  89.           nome_giocatore);
  90.  
  91.  
  92.     printf("\n                    < Si inizia a giocare - %s - >\n", nome_giocatore);
  93.     printf("\n\n                 Le carte decidono chi buttare per primo\n\n");
  94.  
  95.  
  96.     /* pesca carta per chi buttare prima */
  97.     srand(time(0));
  98.     butta_tu = 1+rand() % 10;
  99.  
  100.     switch(butta_tu) {
  101.     case 1: printf("\t         PER ME...  1\n");
  102.     break;
  103.     case 2: printf("\t         PER ME...  2\n");
  104.     break;
  105.     case 3: printf("\t         PER ME...  3\n");
  106.     break;
  107.     case 4: printf("\t         PER ME...  4\n");
  108.     break;
  109.     case 5: printf("\t         PER ME...  5\n");
  110.     break;
  111.     case 6: printf("\t         PER ME...  6\n");
  112.     break;
  113.     case 7: printf("\t         PER ME...  7\n");
  114.     break;
  115.     case 8: printf("\t         PER ME...  8\n");
  116.     break;
  117.     case 9: printf("\t         PER ME...  9\n");
  118.     break;
  119.     case 10: printf("\t        PER ME...  10\n");
  120.     break;
  121.     }
  122.  
  123.     if(butta_tu == 1 ||
  124.        butta_tu == 3 ||
  125.        butta_tu == 5 ||
  126.        butta_tu == 7 ||
  127.        butta_tu == 9)
  128.        {
  129.            printf("\n                 Tocca a me buttare per primo!\n");
  130.        }
  131.     printf("\n\n\nCARTE PC     -> ");
  132.     /* stampa a video le carte giocatore */
  133.     for(i = 0; i < 3; ++i)
  134.        printf("%d%c  ", dat.vett_carte[i].numero,
  135.                         dat.vett_carte[i].palo);
  136.  
  137.     /* stampa a video la BRISCOLA */
  138.     for(k = 3; k < 4; ++k)
  139.       printf("\n\n\nBRISCOLA     ->      %d%c", dat.vett_carte[k].numero,
  140.                                                 dat.vett_carte[k].palo);
  141.  
  142.     printf("\n\n\nLE TUE CARTE -> ");
  143.     /* stampa a video le carte giocatore */
  144.     for(j = 4; j < 7; ++j)
  145.       printf("%d%c  ", dat.vett_carte[j].numero,
  146.                        dat.vett_carte[j].palo);
  147.       printf("\n                [1] [2] [3]\n");
  148.  
  149.       if(butta_tu == 2 ||
  150.          butta_tu == 4 ||
  151.          butta_tu == 6 ||
  152.          butta_tu == 8 ||
  153.          butta_tu == 10 ||
  154.          butta_tu == 1 ||
  155.          butta_tu == 3 ||
  156.          butta_tu == 5 ||
  157.          butta_tu == 7 ||
  158.          butta_tu == 9)
  159.          {
  160.              printf("\n                 Tocca a te buttare per primo!\n");
  161.  
  162.             scanf("%d",
  163.                    &scelta);
  164.  
  165.             if(scelta == 1)
  166.             {
  167.                 if(dat.vett_carte[j].palo == dat.vett_carte[k].palo)
  168.                 {
  169.                     printf("E' una briscola\n");
  170.                 }
  171.                 else if(dat.vett_carte[j].palo != dat.vett_carte[k].palo)
  172.                  printf("Non e' una briscola\n");
  173.             }
  174.          }
  175.  
  176.  
  177.  
  178. }



Pierotofy: aggiustato il code

Ultima modifica effettuata da pierotofy il 13/06/2008 alle 13:15
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 12:08
Venerdì, 13/06/2008
Se non usate il tasto Code per inserire il codice, il listato non si capisce e non si puo' rispondere ...

E poi indica anche il tipo di malfunzionamento ... cosa fa e cosa dovrebbe fare?

PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 23:42
Venerdì, 13/06/2008
Questa istruzione non va come dovrebbe:
Se la carta ha lo stesso palo della briscola dovrebbe dirmi "E' una briscola altrimenti Non è una briscola"....ma questo non va...
es:
BRISCOLA: 9c
LE TUE CARTE 2c 8d 3s
2c e 9c hanno lo stesso palo, cioè la lettera 'c'...spero di essere stato chiaro....ciao e grazie....(CODICE ANSI C)...

ho cliccato code ma questo è il risultato....
Codice sorgente - presumibilmente Plain Text

  1.  


            if(scelta == 1)
            {
                if(dat.vett_carte[j].palo == dat.vett_carte[k].palo)
                {
                    printf("E' una briscola\n");
                }
                else if(dat.vett_carte[j].palo != dat.vett_carte[k].palo)
                 printf("Non e' una briscola\n");
            }
         }

Ultima modifica effettuata da giocala88 il 13/06/2008 alle 23:45
PM Quote