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++ - 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)
Pro


Messaggi: 96
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


"Io ne ho viste cose che voi umani non potreste immaginarvi...."
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
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 ...
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)
Pro


Messaggi: 96
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


"Io ne ho viste cose che voi umani non potreste immaginarvi...."
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)
Pro


Messaggi: 96
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.


"Io ne ho viste cose che voi umani non potreste immaginarvi...."
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