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++ - assegnamento invisibile??
Forum - C/C++ - assegnamento invisibile??

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
NicobhC (Normal User)
Rookie


Messaggi: 23
Iscritto: 21/02/2008

Segnala al moderatore
Postato alle 19:00
Sabato, 23/02/2008
Ciao a tutti, sono uno studente novello di informatica.
Sto scrivendo un programma in C++ che simuli il gioco di battaglia navale, usando una matrice 2D. Carico la matrice 8 x 8 di zeri. Poi alcune celle scelte a caso le inizializzo a 1, 2 e 3. L'utente per colpire inserisce il numero di riga e di colonna della cella scelta. E qua sta il problema: l'utente inserisce il numero di riga r...fin qui tutto ok. poi inserisce quello di colonna c. Ora accade un fatto strano. Mentre il numero di colonna rimane quello che l'utente ha inserito, il numero di riga, quale che sia, si trasforma magicamente in 0, senza operazioni di assegnamento... perché??  :-?
Vi includo il pezzo di codice dove avviene il fattaccio:
Codice sorgente - presumibilmente Delphi

  1. case 'c': //colpire
  2.                  {
  3.                                   //inserisco coordinate della cella bersaglio
  4.                                   r=c=0;
  5.                                   do
  6.                                   {
  7.                                      puts("\nInserisci n* riga della cella da colpire...");
  8.                                      printf("-- Il valore dev'essere compreso in [1, 8]... ");
  9.                                      scanf ("%d", &r);
  10.                               }
  11.                               while (r<1 || r>D);
  12.                               r-=1;
  13.                                   do
  14.                                   {
  15.  
  16.                                      puts("\nInserisci n* colonna della cella da colpire...");
  17.                                      printf("-- Il valore dev'essere compreso in [1, 8]... ");
  18.                                      scanf ("%d", &c);
  19.                               }
  20.                               while (c<1 || c>D);
  21.                               c=c-1;
  22.                               //controllo se ho colpito...
  23.                               if (matr[r][c]==0)
  24.                                  puts("Bersaglio Mancato|");
  25.                   else if (matr[r][c]==1)
  26.                   {
  27.                      puts("Colpito e Affondato");
  28.                      matr[r][c]-=1;
  29.                               }
  30.                               else
  31.                               {
  32.                                  puts("Bersaglio Colpito");
  33.                                  matr[r][c]-=1;
  34.                                   }
  35.                               //verifico se sono ancora presenti "navi"
  36.                               vinto=true;
  37.                               for (r=0; r<D; r++)
  38.                                           for (c=0; c<D; c++)
  39.                                                   if (matr[r][c]!=0)
  40.                                               vinto=false;
  41.                   if (vinto==true)
  42.                                          puts("Hai affondato tutte le navi\n\t**Hai vinto!!!**");
  43.                                   break;
  44.                          }


Grazie a chi mi aiuterà... Ciao :D


In the eye of the tornado, blow me away

http://s12.bitefight.it/c.php?uid=41103
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 20:06
Sabato, 23/02/2008
Ma "dove" avviene il problema? Hai fatto un po' di prove visualizzando i valori di r e c man mano che il programma avanza ?

PM Quote
Avatar
NicobhC (Normal User)
Rookie


Messaggi: 23
Iscritto: 21/02/2008

Segnala al moderatore
Postato alle 22:10
Sabato, 23/02/2008
l'errore avviene nel secondo do-while, ossia quello dove faccio inserire c. Non riesco a capire...:-?


In the eye of the tornado, blow me away

http://s12.bitefight.it/c.php?uid=41103
PM Quote
Avatar
NicobhC (Normal User)
Rookie


Messaggi: 23
Iscritto: 21/02/2008

Segnala al moderatore
Postato alle 22:15
Sabato, 23/02/2008
altrochè se ne ho fatto prove... e succede sempre la stessa cosa... c rimane il valore che ho inserito ma r prende 0... mi starà prendendo in giro il programma o il computer...provo a compilarlo sui computer di scuola e vedo se cambia... 8-|


In the eye of the tornado, blow me away

http://s12.bitefight.it/c.php?uid=41103
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 22:16
Sabato, 23/02/2008
Se inserisci una linea

printf("--- %d %d ---\n", r, c);

dopo la

c=c-1;

cosa ti viene visualizzato quando inserisci le coordinate ?

PM Quote
Avatar
NicobhC (Normal User)
Rookie


Messaggi: 23
Iscritto: 21/02/2008

Segnala al moderatore
Postato alle 22:20
Sabato, 23/02/2008
mi da r = 0... ora sto usando una terza variabile e vedo se torna...


In the eye of the tornado, blow me away

http://s12.bitefight.it/c.php?uid=41103
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 22:23
Sabato, 23/02/2008
Ma inserisci due valori?

PM Quote
Avatar
NicobhC (Normal User)
Rookie


Messaggi: 23
Iscritto: 21/02/2008

Segnala al moderatore
Postato alle 22:25
Sabato, 23/02/2008
si sempre i valori di riga e colonna... solo che invece di usare r ne uso un'altra...non ha senso


In the eye of the tornado, blow me away

http://s12.bitefight.it/c.php?uid=41103
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 22:31
Sabato, 23/02/2008
Questa parte del tuo codice

Codice sorgente - presumibilmente C/C++

  1. //inserisco coordinate della cella bersaglio
  2.                     r=c=0;
  3.                     do
  4.                     {
  5.                         puts("\nInserisci n* riga della cella da colpire...");
  6.                         printf("-- Il valore dev'essere compreso in [1, 8]... ");
  7.                        scanf ("%d", &r);
  8.                   }
  9.                   while (r<1 || r>D);
  10.                   r-=1;
  11.                     do
  12.                     {
  13.  
  14.                         puts("\nInserisci n* colonna della cella da colpire...");
  15.                         printf("-- Il valore dev'essere compreso in [1, 8]... ");
  16.                        scanf ("%d", &c);
  17.                   }
  18.                   while (c<1 || c>D);
  19.                   c=c-1;



presa cosi' come l'ho scritta, funziona regolarmente ...

Non capisco quale sia il tuo problema ...

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo