Dr. Halo
11-03-2004, 12:39
E' un po' lungo ma spero di trovare qualcuno di buon cuore che abbia voglia e tempo di aiutarmi :-) . Immagino sia una cosa molto banale ma io proprio non riesco a vedere l'errore :....( .
Sto provando a realizzare un pgm per il gioco del tris in C (sono proprio alle prime armi in questo linguaggio). Sono a buon punto ma non capisco perchè c'è un'istruzione che mi sta facendo dannare... riporto qui sotto parte del sorgente:
----
do
{
printf("\n %s inserisci le coordinate(lettera numero - es: B2): ", giocatore1);
scanf("%c%d",&lett, &vert);
converti();
}
while (matrice[oriz][vert] != ' ');
matrice[oriz][vert] = 'X';
visualizza();
printf("\n %s = X VS %s = O", giocatore1, giocatore2);
if (hai_vinto() == 1)
{
sw_loop = 0;
printf("\n\n\n HA VINTO %s!!!", giocatore1);
}
else
{
do
{
printf("\n %s inserisci le coordinate(lettera numero - es: C1): ", giocatore2);
scanf("%c%d",&lett, &vert);
converti(); //converte la lettera digitata in numero da utilizzare per la coordinata orizzontale
}
while (matrice[oriz][vert] != ' ');
matrice[oriz][vert] = 'O';
----
nel secondo pezzo di codice (quello dopo l'"else" all'interno del "do") la variabile "lett" è già impostata dalla precedente "scanf".
cio' che non capisco è: il programma esegue la "printf" e anche la "scanf" ma non mi fa inserire i valori, esegue la funzione "converti" ottenendo così un indice da utilizzare nella while, esegue la "while" trova l'indirizzo di memorià diverso da spazio per cui rifa' la "do" e finalmente dopo la "printf" mi lascia inserire dei valori con la "scanf".
Questo pezzo di codice è ripetuto in ciclo fino a quando non c'è un vincitore o la griglia è piena (quest'ultimo controllo non è presente nel listato che ho riportato). Penso sia chiaro che ciò che volevo fare era fare la scanf al primo giro. Inoltre non capisco come mai ma questo problema si verifica solo al primo ciclo degli inserimenti: a quelli successivi tutto funziona come volevo...
Grazie in anticipo di ogni eventuale aiuto e/o suggerimento.
Sto provando a realizzare un pgm per il gioco del tris in C (sono proprio alle prime armi in questo linguaggio). Sono a buon punto ma non capisco perchè c'è un'istruzione che mi sta facendo dannare... riporto qui sotto parte del sorgente:
----
do
{
printf("\n %s inserisci le coordinate(lettera numero - es: B2): ", giocatore1);
scanf("%c%d",&lett, &vert);
converti();
}
while (matrice[oriz][vert] != ' ');
matrice[oriz][vert] = 'X';
visualizza();
printf("\n %s = X VS %s = O", giocatore1, giocatore2);
if (hai_vinto() == 1)
{
sw_loop = 0;
printf("\n\n\n HA VINTO %s!!!", giocatore1);
}
else
{
do
{
printf("\n %s inserisci le coordinate(lettera numero - es: C1): ", giocatore2);
scanf("%c%d",&lett, &vert);
converti(); //converte la lettera digitata in numero da utilizzare per la coordinata orizzontale
}
while (matrice[oriz][vert] != ' ');
matrice[oriz][vert] = 'O';
----
nel secondo pezzo di codice (quello dopo l'"else" all'interno del "do") la variabile "lett" è già impostata dalla precedente "scanf".
cio' che non capisco è: il programma esegue la "printf" e anche la "scanf" ma non mi fa inserire i valori, esegue la funzione "converti" ottenendo così un indice da utilizzare nella while, esegue la "while" trova l'indirizzo di memorià diverso da spazio per cui rifa' la "do" e finalmente dopo la "printf" mi lascia inserire dei valori con la "scanf".
Questo pezzo di codice è ripetuto in ciclo fino a quando non c'è un vincitore o la griglia è piena (quest'ultimo controllo non è presente nel listato che ho riportato). Penso sia chiaro che ciò che volevo fare era fare la scanf al primo giro. Inoltre non capisco come mai ma questo problema si verifica solo al primo ciclo degli inserimenti: a quelli successivi tutto funziona come volevo...
Grazie in anticipo di ogni eventuale aiuto e/o suggerimento.