Oppure

Loading
23/02/08 18:00
NicobhC
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:
case 'c': //colpire
	         {
			  	  //inserisco coordinate della cella bersaglio
			  	  r=c=0;
			  	  do
			  	  {
 	   			     puts("\nInserisci n* riga della cella da colpire...");
 	   			     printf("-- Il valore dev'essere compreso in [1, 8]... ");
			  	     scanf ("%d", &r);
			      }
			      while (r<1 || r>D);
			      r-=1;
			  	  do
			  	  {

 	   			     puts("\nInserisci n* colonna della cella da colpire...");
 	   			     printf("-- Il valore dev'essere compreso in [1, 8]... ");
			  	     scanf ("%d", &c);
			      }
			      while (c<1 || c>D);
			      c=c-1;
			      //controllo se ho colpito...
			      if (matr[r][c]==0)
			         puts("Bersaglio Mancato|");
                  else if (matr[r][c]==1)
                  {
                     puts("Colpito e Affondato");
                     matr[r][c]-=1;
			      }
			      else
			      {
		   	         puts("Bersaglio Colpito");
		   	         matr[r][c]-=1; 
				  }
			      //verifico se sono ancora presenti "navi"
			      vinto=true;
			      for (r=0; r<D; r++)
				   	  for (c=0; c<D; c++)
					   	  if (matr[r][c]!=0)
   	 			              vinto=false;
                  if (vinto==true)
	   	 			 puts("Hai affondato tutte le navi\n\t**Hai vinto!!!**");
			  	  break;
			 }

Grazie a chi mi aiuterà... Ciao :D
aaa
23/02/08 19:06
gantonio
Ma "dove" avviene il problema? Hai fatto un po' di prove visualizzando i valori di r e c man mano che il programma avanza ?
aaa
23/02/08 21:10
NicobhC
l'errore avviene nel secondo do-while, ossia quello dove faccio inserire c. Non riesco a capire...:-?
aaa
23/02/08 21:15
NicobhC
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-|
aaa
23/02/08 21:16
gantonio
Se inserisci una linea

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

dopo la

c=c-1;

cosa ti viene visualizzato quando inserisci le coordinate ?
aaa
23/02/08 21:20
NicobhC
mi da r = 0... ora sto usando una terza variabile e vedo se torna...
aaa
23/02/08 21:23
gantonio
Ma inserisci due valori?
aaa
23/02/08 21:25
NicobhC
si sempre i valori di riga e colonna... solo che invece di usare r ne uso un'altra...non ha senso
aaa