NicobhC (Normal User)
Rookie
Messaggi: 23
Iscritto: 21/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 |
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
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Ma "dove" avviene il problema? Hai fatto un po' di prove visualizzando i valori di r e c man mano che il programma avanza ?
|
|
NicobhC (Normal User)
Rookie
Messaggi: 23
Iscritto: 21/02/2008
|
l'errore avviene nel secondo do-while, ossia quello dove faccio inserire c. Non riesco a capire...
|
|
NicobhC (Normal User)
Rookie
Messaggi: 23
Iscritto: 21/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...
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Se inserisci una linea
printf("--- %d %d ---\n", r, c);
dopo la
c=c-1;
cosa ti viene visualizzato quando inserisci le coordinate ?
|
|
NicobhC (Normal User)
Rookie
Messaggi: 23
Iscritto: 21/02/2008
|
mi da r = 0... ora sto usando una terza variabile e vedo se torna...
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Ma inserisci due valori?
|
|
NicobhC (Normal User)
Rookie
Messaggi: 23
Iscritto: 21/02/2008
|
si sempre i valori di riga e colonna... solo che invece di usare r ne uso un'altra...non ha senso
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
Questa parte del tuo codice
Codice sorgente - presumibilmente C/C++ |
//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;
|
presa cosi' come l'ho scritta, funziona regolarmente ...
Non capisco quale sia il tuo problema ...
|
|