Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - errore nel programma
Forum - C/C++ - errore nel programma

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
lallo12 (Normal User)
Newbie


Messaggi: 20
Iscritto: 20/02/2017

Segnala al moderatore
Postato alle 22:45
Venerdì, 26/05/2017
salve a tutti ho implementato un codice ma mi da un errore, qualcuno sa spiegarmi di cosa si tratta.
il mio codice è questo:
Codice sorgente - presumibilmente C++

  1. /* Si vuole sviluppare un programma per la simulazione del gioco di 4 navicelle spaziali . La mappa da gioco risulta di forma rettangolare e di dimensioni 8x7. L’utente ha a disposizione una navicella ferma (rettangolo rosso in figura). Nel campo da gioco si muovono 3 navicelle avversarie che devono essere colpite (rettangolo giallo, blu e verde).
  2. */
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7.  
  8. //prototipi
  9. void muovi_gialla(int random, char campo[8][7], int *G_x, int *G_y);
  10. void muovi_verde(int random, char campo[8][7], int *V_x, int *V_y);
  11. void muovi_blue(int random, char campo[8][7], int *B_x, int *B_y);
  12. int controllo(int spara,int y);
  13. void pulisci(int sparato, char campo[8][7], int *x, int*y);
  14. int main(int argc, char *argv[])
  15. {
  16.     srand((unsigned int)time(0));
  17.     int i,j,G_x,G_y,B_x,B_y,V_x,V_y,R_x,R_y,random,sparato_G,sparato_B,sparato_V;
  18.     int K=0;
  19.     int spara=1;
  20.     char campo[8][7]= {{'G', ' ', ' ', ' ', ' ', ' ', ' '},
  21.                      {' ', ' ', ' ', 'B', ' ', ' ', ' '},
  22.                      {' ', ' ', ' ', ' ', ' ', ' ', 'V'},
  23.                      {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  24.                      {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  25.                      {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  26.                      {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  27.                      {' ', ' ', ' ', 'R', ' ', ' ', ' '}};
  28.  G_x=0;G_y=0;
  29.  B_x=1;B_y=3;
  30.  V_x=2;V_y=6;
  31.  R_x=7;R_y=3;
  32. //posizionamento iniziale
  33.  
  34.  
  35. for(i=0;i<8;i++)
  36. {
  37.     for(j=0;j<7;j++)
  38.     printf("%c",campo[i][j]);
  39.     printf("\n");
  40. }
  41. K=0;  //passi
  42. do{
  43. K++;
  44. if (sparato_V!=1)    //se la navicella non è stata colpita allora muoverla
  45. {
  46.     random=rand()%10;
  47.     muovi_verde(random, campo, &V_x,&V_y);
  48.     printf("\tRandom V:%d",random);
  49. }
  50. else{
  51.     printf("la verde e' colpita\n");
  52. }
  53. if (sparato_B!=1)
  54. {
  55.     random=rand()%10;
  56.     muovi_blue(random, campo, &B_x,&B_y);
  57.     printf("\tRandom V:%d",random);
  58. }
  59. else{
  60.     printf("la blue e' colpita\n");
  61. }
  62. if (sparato_G!=1)
  63. {
  64.     random=rand()%10;
  65.     muovi_gialla(random, campo, &G_x,&G_y);
  66.     printf("\tRandom V:%d",random);
  67. }
  68. else{
  69.     printf("la gialla e' colpita\n");
  70. }
  71. printf("\n");
  72. for(i=0;i<8;i++) //visualizza sullo schermo il campo dopo il primo movimento delle navicelle
  73. {
  74.     for(j=0;j<7;j++)
  75.         printf("%c",campo[i][j]);
  76.         printf("\n");
  77.         printf("\n\n");
  78.         printf("\n\t\t\t k=%d\n", K);
  79.         printf("\t V=%d%d", V_x,V_y);
  80.         if(sparato_V==1)
  81.         {
  82.             printf("colpita");
  83.         }
  84. printf("\n\t B=%d%d", B_x,B_y);
  85.  if(sparato_B==1)
  86.         {
  87.             printf("colpita");
  88.         }
  89. printf("\n\t B=%d%d", G_x,G_y);
  90.  if(sparato_G==1)
  91.         {
  92.             printf("colpita");
  93.         }
  94.         printf("\n\nvuoi sparare? 1=SI alro int=NO \n\n");
  95.         scanf("&d",&spara);
  96.         printf("\n");
  97.  
  98. if(sparato_V!=1)
  99. {
  100.     sparato_V=controllo(spara, V_y);
  101. }
  102. if(sparato_B!=1)
  103. {
  104.     sparato_B=controllo(spara, B_y);
  105. }
  106.  
  107. if(sparato_G!=1)
  108. {
  109.     sparato_G=controllo(spara, G_y);
  110. }
  111.  
  112.  /*questi controlli servono per controllare, in caso di sparo, se le navicelle si trovano in posizione*/
  113. pulisci(sparato_V,campo, &V_x,&V_y);
  114. pulisci(sparato_B,campo, &B_x,&B_y);
  115. pulisci(sparato_G,campo, &G_x,&G_y);
  116.  
  117. }
  118. while (((sparato_G!=1)|| (sparato_B!=1) || (sparato_V!=1)) && (K<100)); /*esegui il ciclo finchè tutte e tre le navicelle non sono state distrutte oppure il contatore passi è arrivato a 100*/
  119.  
  120. printf("\n\n\n Fine partita \n\n\n");
  121. system("PAUSE");
  122. return 0;
  123. }
  124.  
  125. /* Funzioni movimento
  126. random: è  il numero random generato nel main
  127. *x, *y sono coordinate delle navicelle che cambiano con il passare dei turni
  128. */
  129.  
  130. void muovi_gialla(int random, char campo[8][7], int *G_x,int *G_y)
  131. {
  132.     if((random<3)&&(*G_y==6))
  133.     {
  134.         campo[*G_x][*G_y]=' ';
  135.         *G_y=0;
  136.     }
  137.     else if(random<3)
  138.     {
  139.         campo[*G_x][*G_y]=' ';
  140.         *G_y=*G_y+1;
  141.     }
  142.     campo[*G_x][*G_y]='G';
  143. }
  144. void muovi_verde(int random, char campo[8][7], int *V_x,int *V_y)
  145. {
  146.         campo[*V_x][*V_y]=' ';
  147.         if(random<4){
  148.  
  149.     if(*V_y==6)
  150.         *V_y=2;
  151.     else if(*V_y==5)
  152.         *V_y=1;
  153.     else if(*V_y==4)
  154.         *V_y=0;
  155.     else
  156.         *V_y=*V_y+3;
  157.         }
  158.         else if(random>=4 && random <=6)
  159.         {
  160.             if(*V_y==0)
  161.                *V_y=5;
  162.                 else if(*V_y=1)
  163.                 *V_y=6;
  164.             else
  165.                 *V_y=*V_y+2;
  166.         }
  167.         else if(random>=7)
  168.         {
  169.             if(*V_y==6)
  170.                *V_y=0;
  171.                else
  172.                 *V_y=*V_y+1;
  173.         }
  174.         campo[*V_y][*V_y]='V';
  175. }
  176. void muovi_blue(int random, char campo[8][7], int *B_x,int *B_y)
  177. {
  178.     campo[*B_x][*B_y]=' ';
  179.     if (random<7)
  180.     {
  181.         if(*B_y==1)
  182.             *B_y=6;
  183.         else if(*B_y==0)
  184.             *B_y=5;
  185.         else
  186.             *B_y=*B_y-2;
  187.     }
  188.     else if (random>7)
  189.     {
  190.         if(*B_y==0)
  191.             *B_y=6;
  192.         else
  193.             *B_y=*B_y-1;
  194.     }
  195.     campo[*B_x][*B_y]='B';
  196. }
  197.  
  198. /* la function che segue controlla se una navicella e' stata colpita,
  199. controlla inoltre anche se l'utente ha inserito il valore 1(l'opzione per sparare ) o un altro intero (nel caso l'utente decidesse di non sparare)*/
  200.  
  201. int controllo(int spara, int y)
  202. {
  203.     int sparato;
  204.     if((spara==1)&&(y==3))
  205.     {
  206.         sparato=1;
  207.     }
  208.     else
  209.     {
  210.         sparato=0;
  211.     }
  212.     return sparato;
  213. }
  214. void pulisci(int sparato, char campo[8][7], int *x, int *y) //pulisce dalla campo la navicella colpita
  215.  
  216. {
  217.     {
  218.         if(sparato==1)
  219.             campo[*x][*y]=' ';
  220.     }
  221. }
  222. }



mi da questo errore:
|115|error: expected 'while' before 'void'|

Ultima modifica effettuata da lallo12 il 27/05/2017 alle 8:37
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 0:59
Sabato, 27/05/2017
Gli errori sono più di 1.

Innanzitutto, cosa dovrebbe fare il programma??
Secondo:

Se vuoi capire un errore, basta indentare bene il codice. Te ne dovresti accorgere subito, è un buon esercizio.
Un altro errore (logico):  riguarda bene quello che scrivi dentro gli if..elseif...elsee i do..while
controlla pure le varie funzioni come parametri e sopratutto parentesi


Ultima modifica effettuata da Mikelius il 27/05/2017 alle 1:06
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 7:39
Sabato, 27/05/2017
Devi assolutamente indentare il codice ed individuare i vari blocchi, altrimenti non capirai mai dove sta il problema.



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
lallo12 (Normal User)
Newbie


Messaggi: 20
Iscritto: 20/02/2017

Segnala al moderatore
Postato alle 8:24
Sabato, 27/05/2017
Scusami cosa intendi per indentare  il codice?

PM Quote
Avatar
lallo12 (Normal User)
Newbie


Messaggi: 20
Iscritto: 20/02/2017

Segnala al moderatore
Postato alle 8:38
Sabato, 27/05/2017
ho modificato il codice, spero cosi sia piu' leggibile

PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 9:03
Sabato, 27/05/2017
Testo quotato

Postato originariamente da lallo12:

Scusami cosa intendi per indentare  il codice?



E' il termine informatico per indicare lo stazio prima delle istruzioni, o la posizione di parentesi e simili.
Una sorta di rientro che trovi nei testi letterali.

Codice sorgente - presumibilmente C++

  1. // codice non indentato
  2. void pulisci(int x, int y)
  3. {
  4. {
  5. if(...)
  6. x=y;
  7. }
  8. }
  9. }
  10.  
  11. // codice indentato
  12. void pulisci(int x, int y)
  13. {
  14.     if(...)
  15.    {
  16.         x=y;
  17.     }
  18. }



In questo modo, hai una visione di apertura e chiusura delle parentesi, "ad esempio"


P.s. non modificare il primo post. viene difficile seguire le modifiche al codice se lo fai

Ultima modifica effettuata da Mikelius il 27/05/2017 alle 9:06
PM Quote
Avatar
lallo12 (Normal User)
Newbie


Messaggi: 20
Iscritto: 20/02/2017

Segnala al moderatore
Postato alle 9:27
Sabato, 27/05/2017
Grazie per la spiegazione spero sia più chiaro, sicuramente con il tempo saprò fare di meglio.
comunque ancora non riesco a individuare l'errore
Codice sorgente - presumibilmente C++

  1. /* Si vuole sviluppare un programma per la simulazione del gioco di 4 navicelle spaziali . La mappa da gioco risulta di forma rettangolare e di dimensioni 8x7. LÂ’utente ha a disposizione una navicella ferma (rettangolo rosso in figura). Nel campo da gioco si muovono 3 navicelle avversarie che devono essere colpite (rettangolo giallo, blu e verde).
  2. */
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7. //prototipi
  8. void muovi_gialla(int random, char campo[8][7], int *G_x, int *G_y);
  9. void muovi_verde(int random, char campo[8][7], int *V_x, int *V_y);
  10. void muovi_blue(int random, char campo[8][7], int *B_x, int *B_y);
  11. int controllo(int spara,int y);
  12. void pulisci(int sparato, char campo[8][7], int *x, int*y);
  13. int main(int argc, char *argv[])
  14. {
  15.     srand((unsigned int)time(0));
  16.     int i,j,G_x,G_y,B_x,B_y,V_x,V_y,R_x,R_y,random,sparato_G,sparato_B,sparato_V;
  17.     int K=0;
  18.     int spara=1;
  19.     char campo[8][7]= {{'G', ' ', ' ', ' ', ' ', ' ', ' '},
  20.                      {' ', ' ', ' ', 'B', ' ', ' ', ' '},
  21.                      {' ', ' ', ' ', ' ', ' ', ' ', 'V'},
  22.                      {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  23.                      {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  24.                      {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  25.                      {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  26.                      {' ', ' ', ' ', 'R', ' ', ' ', ' '}};
  27.  G_x=0;G_y=0;
  28.  B_x=1;B_y=3;
  29.  V_x=2;V_y=6;
  30.  R_x=7;R_y=3;
  31.  //posizionamento iniziale
  32.  
  33. for(i=0;i<8;i++)
  34. {
  35.     for(j=0;j<7;j++)
  36.     printf("%c",campo[i][j]);
  37.     printf("\n");
  38. }
  39. K=0; //passi
  40. do
  41. {
  42. K++;
  43.    if (sparato_V!=1) //se la navicella non è stata colpita allora muoverla
  44.     {
  45.     random=rand()%10;
  46.     muovi_verde(random, campo, &V_x,&V_y);
  47.     printf("\tRandom V:%d",random);
  48.     }
  49.         else
  50.         {
  51.          printf("la verde e' colpita\n");
  52.         }
  53.     if (sparato_B!=1)
  54.     {
  55.     random=rand()%10;
  56.     muovi_blue(random, campo, &B_x,&B_y);
  57.     printf("\tRandom V:%d",random);
  58.     }
  59.         else
  60.         {              
  61.          printf("la blue e' colpita\n");
  62.         }
  63.     if (sparato_G!=1)
  64.     {
  65.      random=rand()%10;
  66.      muovi_gialla(random, campo, &G_x,&G_y);
  67.      printf("\tRandom V:%d",random);
  68.                           }
  69.        else
  70.        {
  71.         printf("la gialla e' colpita\n");
  72.        }
  73.  
  74. printf("\n");
  75.  
  76. for(i=0;i<8;i++) //visualizza sullo schermo il campo dopo il primo movimento delle navicelle
  77. {
  78.     for(j=0;j<7;j++)
  79.         printf("%c",campo[i][j]);
  80.         printf("\n");
  81.         printf("\n\n");
  82.         printf("\n\t\t\t k=%d\n", K);
  83.         printf("\t V=%d%d", V_x,V_y);
  84.          if(sparato_V==1)
  85.          {
  86.         printf("colpita");
  87.          }
  88.            printf("\n\t B=%d%d", B_x,B_y);
  89.  if(sparato_B==1)
  90. {
  91.     printf("colpita");
  92. }
  93.    printf("\n\t B=%d%d", G_x,G_y);
  94.    
  95. if(sparato_G==1)
  96. {
  97.     printf("colpita");
  98. }
  99.     printf("\n\nvuoi sparare? 1=SI alro int=NO \n\n");
  100.     scanf("&d",&spara);
  101.     printf("\n");
  102.  
  103. if(sparato_V!=1)
  104. {
  105.     sparato_V=controllo(spara, V_y);
  106. }
  107.     if(sparato_B!=1)
  108.     {
  109.     sparato_B=controllo(spara, B_y);
  110.     }
  111.  
  112.         if(sparato_G!=1)
  113.         {
  114.         sparato_G=controllo(spara, G_y);
  115.         }
  116.        
  117. //questi controlli servono per controllare,in caso di sparo, se le navicelle sono in posizione
  118.  
  119. pulisci(sparato_V,campo, &V_x,&V_y);
  120. pulisci(sparato_B,campo, &B_x,&B_y);
  121. pulisci(sparato_G,campo, &G_x,&G_y);
  122.  
  123. }
  124. while (((sparato_G!=1)|| (sparato_B!=1) || (sparato_V!=1)) && (K<100)) /*esegui il ciclo finchè tutte e tre le navicelle non sono state distrutte oppure il contatore passi è arrivato a 100*/
  125. printf("\n\n\n Fine partita \n\n\n");
  126. system("PAUSE");
  127. return 0;
  128. }
  129. /* Funzioni movimento
  130. random: è  il numero random generato nel main
  131. *x, *y sono coordinate delle navicelle che cambiano con il passare dei turni
  132. */
  133. void muovi_gialla(int random, char campo[8][7], int *G_x,int *G_y)
  134. {
  135.     if((random<3)&&(*G_y==6))
  136.     {
  137.         campo[*G_x][*G_y]=' ';
  138.         *G_y=0;
  139.     }
  140.         else if(random<3)
  141.         {
  142.         campo[*G_x][*G_y]=' ';
  143.         *G_y=*G_y+1;
  144.         }
  145. campo[*G_x][*G_y]='G';
  146. }
  147. void muovi_verde(int random, char campo[8][7], int *V_x,int *V_y)
  148. {
  149.         campo[*V_x][*V_y]=' ';
  150.         if(random<4)
  151.         {
  152.             if(*V_y==6)
  153.             *V_y=2;
  154.                  else if(*V_y==5)
  155.                  *V_y=1;
  156.                      else if(*V_y==4)
  157.                      *V_y=0;
  158.                          else
  159.                             *V_y=*V_y+3;
  160.         }
  161.         else if(random>=4 && random <=6)
  162.         {
  163.             if(*V_y==0)
  164.                *V_y=5;
  165.                 else if(*V_y=1)
  166.                 *V_y=6;
  167.             else
  168.                 *V_y=*V_y+2;
  169.         }
  170.             else if(random>=7)
  171.             {
  172.             if(*V_y==6)
  173.                *V_y=0;
  174.                else
  175.                 *V_y=*V_y+1;
  176.             }
  177. campo[*V_y][*V_y]='V';
  178. }
  179. void muovi_blue(int random, char campo[8][7], int *B_x,int *B_y)
  180. {
  181.     campo[*B_x][*B_y]=' ';
  182.     if (random<7)
  183.     {
  184.         if
  185.         (*B_y==1)
  186.             *B_y=6;
  187.         else if(*B_y==0)
  188.             *B_y=5;
  189.         else
  190.             *B_y=*B_y-2;
  191.     }
  192.             else if (random>7)
  193.             {
  194.             if(*B_y==0)
  195.             *B_y=6;
  196.             else
  197.             *B_y=*B_y-1;
  198.              }
  199. campo[*B_x][*B_y]='B';
  200. }
  201. /* la function che segue controlla se una navicella e' stata colpita,
  202. controlla inoltre anche se l'utente ha inserito il valore 1(l'opzione per sparare ) o un altro intero (nel caso l'utente decidesse di non sparare)*/
  203.  
  204. int controllo(int spara, int y)
  205. {
  206.     int sparato;
  207.     if((spara==1)&&(y==3))
  208.     {
  209.     sparato=1;
  210.     }
  211.         else
  212.         {
  213.         sparato=0;
  214.         }
  215. return sparato;
  216. }
  217. void pulisci(int sparato, char campo[8][7], int *x, int *y)
  218. {
  219.         {
  220.         if(sparato==1)
  221.         campo[*x][*y]=' ';
  222.         }
  223. }
  224. }


Ultima modifica effettuata da lallo12 il 27/05/2017 alle 9:32
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 11:39
Sabato, 27/05/2017
Ti do un aiutino:

Testo quotato

Postato originariamente da lallo12:
Codice sorgente - presumibilmente C++

  1. void pulisci(int sparato, char campo[8][7], int *x, int *y)
  2. {
  3.         {
  4.         if(sparato==1)
  5.         campo[*x][*y]=' ';
  6.         }
  7. }
  8. }





qua non ti sembra ci sia qualcosa di strano?

Solo per curiosità, ma che studi hai fatto?
Questo progetto non è impegnativo, ma lo diventa se sei alle prime armi.
Qua c'è un errore evidente, se non riesci a localizzarlo è meglio che riprendi i concetti base del linguaggio.
Non è per non aiutarti col giochino. ma certi errori denotano una scarsa conoscenza del linguaggio, alle sue basi.

PM Quote
Avatar
lallo12 (Normal User)
Newbie


Messaggi: 20
Iscritto: 20/02/2017

Segnala al moderatore
Postato alle 12:01
Sabato, 27/05/2017
in realtà sono al primo anno di programmazione1...il pezzo di ocdice che hai postato tu dovrebbe essere riscritto cosi
Codice sorgente - presumibilmente C++

  1. void pulisci(int sparato, char campo[8][7], int *x, int *y)
  2. {      
  3.         if(sparato==1)
  4.         {
  5.         campo[*x][*y]=' ';         
  6.         }
  7.       }
  8.    }


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo